Z izboljšanjem tehnologij grafičnega prikaza se je izboljšal tudi API operacijskih sistemov, ki programerjem ponuja vedno več možnosti za razvoj nestandardnih vmesniških elementov. Ena od novosti operacijskega sistema Windows 2000 je bila torej večplastna okna, katerih deli so lahko prosojni. Kmalu je na MSDN na voljo opis API-ja za delo z večplastnimi okni. Na forumih programerjev pa še vedno postavljajo vprašanja, kako narediti okno polprozorno.
Potrebno
- - prevajalnik;
- Windows SDK ali ogrodje za programiranje Windows -.
Navodila
Korak 1
Poiščite ročaj okna, ki ga želite narediti polprozornega. Poiščite ali ustvarite okno. Če ga želite ustvariti, uporabite funkcije CreateWindow, CreateWindowEx API ali metode ovijanja okoli teh funkcij, ki spadajo v razrede uporabljenega ogrodja. Prototip funkcije CreateWindow je videti takole:
HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMeni,
HINSTANCE hInstance, LPVOID lpParam);
Kot lahko vidite, funkcija vrne ročaj ustvarjenemu oknu kot rezultat izvajanja. Če je uporabljen kateri koli razred ovitka, uporabite roke na objektu, ki ustreza ustvarjenemu oknu, da dobite ročaj.
2. korak
Iskanje okna je mogoče s pomočjo klicev API FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows in njihovih kombinacij. S funkcijama WindowFromPoint in ChildWindowFromPoint lahko dobite ročaj okna znotraj določenega območja.
3. korak
Okno nastavite na razširjeni slog WS_EX_LAYERED. Uporabite API SetWindowLong ali ustrezne metode objektov zavijanja. Funkcija SetWindowLong v celoti nadomesti spremenljive podatke o parametrih okna, zato jo uporabite v kombinaciji s funkcijo GetWindowLong, da pridobite prejšnjo vrednost za nabor zastavic sloga. Na primer, slog lahko spremenite tako:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Tu je hWnd ročaj okna, najden kot rezultat izvajanja dejanj, opisanih v prejšnjem koraku.
4. korak
Naredite okno polprozorno. Uporabite API SetLayeredWindowAttributes ali metode razredov ovoja. Prototip funkcije SetLayeredWindowAttributes je videti takole:
BOOL SetLayeredWindowAttributes (HWND hwnd, COLORREF crKey, BYTE bAlfa, DWORD dwFlags);
5. korak
Parameter hwnd za funkcijo mora biti veljaven ročaj okna, pridobljen v prvem koraku. Parameter crKey je barvni ključ, ki se uporablja za določanje polprozornih področij. Parameter bAlpha določa vrednost prosojnosti. Če je vrednost parametra bAlpha enaka 0, bodo "polprozorna" območja popolnoma prozorna. Če je parameter bAlpha 255, bodo popolnoma neprozorni. Parameter dwFlags določa način nadaljnjega prikaza vsebine okna. Ko je zastavica LWA_COLORKEY vključena v vrednost dwFlags, bodo polprozorna območja okna določena na podlagi barvnega ključa. Ko je omogočena zastavica LWA_ALPHA, se za določanje vrednosti prosojnosti uporabi parameter bAlpha.
6. korak
Če želite narediti celotno okno polprozorno, pokličite SetLayeredWindowAttributes z želeno vrednostjo parametra bAlpha, zastavico LWA_ALPHA, vendar ne zastavico LWA_COLORKEY. Najdeni ročaj okna uporabite kot prvi parameter funkcije. Če želite na primer narediti okno napol prozorno, uporabite klic:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);