S vylepšením technológií grafického zobrazenia sa zlepšilo aj API operačných systémov, ktoré programátorom poskytovalo čoraz viac príležitostí na vývoj neštandardných prvkov rozhrania. Jednou z noviniek operačného systému Windows 2000 boli teda vrstvené okná, ktorých časti mohli byť priesvitné. Na stránkach MSDN bol čoskoro k dispozícii popis API pre prácu s vrstvami okien. Na fórach programátorov sa však stále kladú otázky, ako urobiť polopriehľadné okno.
Nevyhnutné
- - prekladač;
- Windows SDK alebo rámec pre programovanie Windows -.
Inštrukcie
Krok 1
Zaobstarajte si kľučku k oknu, ktoré chcete vytvoriť polopriehľadné. Nájdite alebo vytvorte okno. Na jeho vytvorenie použite buď funkcie CreateWindow, CreateWindowEx API, alebo obalové metódy okolo týchto funkcií patriacich do tried použitého rámca. Prototyp funkcie CreateWindow vyzerá takto:
HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nVýška, HWND hWndParent, HMENU hMenu,
HINSTANCE hInstance, LPVOID lpParam);
Ako vidíte, funkcia vráti do vytvoreného okna popisovač ako výsledok vykonania. Ak sa použije ľubovoľná trieda obálky, na získanie popisovača použite jej metódy na objekt zodpovedajúci vytvorenému oknu.
Krok 2
Vyhľadanie okna je možné vykonať pomocou volaní API FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows a ich kombinácií. Popisovač okna môžete získať v konkrétnej oblasti pomocou funkcií WindowFromPoint a ChildWindowFromPoint.
Krok 3
Nastavte okno na rozšírený štýl WS_EX_LAYERED. Použite rozhranie SetWindowLong API alebo zodpovedajúce metódy objektov wrapper. Funkcia SetWindowLong úplne nahrádza informácie o parametroch upraviteľného okna, takže ju v kombinácii s funkciou GetWindowLong môžete načítať z predchádzajúcej hodnoty pre sadu príznakov štýlu. Napríklad štýl je možné zmeniť takto:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Tu hWnd je popisovač okna nájdený v dôsledku vykonania akcií popísaných v predchádzajúcom kroku.
Krok 4
Okno urobte polopriehľadným. Použite rozhranie SetLayeredWindowAttributes API alebo metódy tried obálky. Prototyp funkcie SetLayeredWindowAttributes vyzerá takto:
BOOL SetLayeredWindowAttributes (HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
Krok 5
Parameter hwnd funkcie musí byť platný popisovač okna získaný v prvom kroku. Parameter crKey je farebný kľúč používaný na definovanie polopriehľadných oblastí. Parameter bAlpha určuje hodnotu priesvitnosti. S hodnotou parametra bAlpha rovnou 0 budú „polopriehľadné“oblasti úplne priehľadné. Ak je parameter bAlpha 255, budú úplne nepriehľadné. Parameter dwFlags určuje režim ďalšieho zobrazovania obsahu okna. Keď je do hodnoty dwFlags zahrnutý príznak LWA_COLORKEY, polopriehľadné oblasti okna sa určia na základe farebného kľúča. Keď je povolený príznak LWA_ALPHA, použije sa na určenie hodnoty priesvitnosti parameter bAlpha.
Krok 6
Ak chcete, aby bolo celé okno polopriehľadné, zavolajte SetLayeredWindowAttributes s preferovanou hodnotou parametra bAlpha, príznakom LWA_ALPHA, ale bez príznaku LWA_COLORKEY. Ako prvý parameter funkcie použite nájdený popisovač okna. Napríklad na to, aby bolo okno polopriehľadné, použite hovor:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);