Se zdokonalením technologií grafického zobrazení se také zlepšilo API operačních systémů, což programátorům poskytovalo stále více příležitostí pro vývoj nestandardních prvků rozhraní. Jednou z inovací operačního systému Windows 2000 byla tedy vrstvená okna, jejichž části mohly být průsvitné. Brzy byl na MSDN k dispozici popis API pro práci s vrstvenými okny. Na fórech programátorů se však stále kladou otázky, jak vytvořit poloprůhledné okno.
Nezbytné
- - překladač;
- - Windows SDK nebo rámec pro programování Windows -.
Instrukce
Krok 1
Získejte popisovač okna, které chcete poloprůhledné. Najděte nebo vytvořte okno. Chcete-li jej vytvořit, použijte buď funkce CreateWindow, CreateWindowEx API, nebo obalové metody kolem těchto funkcí patřících do tříd použitého rozhraní. Prototyp funkce CreateWindow vypadá 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);
Jak můžete vidět, funkce vrátí popisovač do vytvořeného okna jako výsledek provedení. Pokud je použita jakákoli obálka, použijte její metody na objekt odpovídající vytvořenému oknu, abyste získali popisovač.
Krok 2
Hledání okna lze provést pomocí volání API FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows a jejich kombinací. Popisovač okna můžete získat v určité oblasti pomocí funkcí WindowFromPoint a ChildWindowFromPoint.
Krok 3
Nastavte okno na rozšířený styl WS_EX_LAYERED. Použijte SetWindowLong API nebo odpovídající metody objektů wrapper. Funkce SetWindowLong zcela nahrazuje informace o parametru upravitelného okna, takže ji použijte v kombinaci s funkcí GetWindowLong k načtení předchozí hodnoty pro sadu příznaků stylu. Styl lze například změnit takto:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Zde hWnd je popisovač okna nalezený v důsledku provedení akcí popsaných v předchozím kroku.
Krok 4
Udělejte okno poloprůhledné. Použijte SetLayeredWindowAttributes API nebo metody tříd obálky. Prototyp funkce SetLayeredWindowAttributes vypadá takto:
BOOL SetLayeredWindowAttributes (HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
Krok 5
Parametr hwnd funkce musí být platný popisovač okna získaný v prvním kroku. Parametr crKey je barevný klíč používaný k definování poloprůhledných oblastí. Parametr bAlpha určuje hodnotu průsvitnosti. S hodnotou parametru bAlpha rovnou 0 budou „poloprůhledné“oblasti zcela průhledné. Pokud je parametr bAlpha 255, budou zcela neprůhledné. Parametr dwFlags určuje režim dalšího zobrazení obsahu okna. Když je v hodnotě dwFlags zahrnut příznak LWA_COLORKEY, poloprůhledné oblasti okna budou určeny na základě barevného klíče. Když je povolen příznak LWA_ALPHA, použije se k určení hodnoty průsvitnosti parametr bAlpha.
Krok 6
Aby bylo celé okno poloprůhledné, zavolejte SetLayeredWindowAttributes s preferovanou hodnotou parametru bAlpha, příznakem LWA_ALPHA, ale bez příznaku LWA_COLORKEY. Nalezený popisovač okna použijte jako první parametr funkce. Chcete-li například vytvořit poloprůhledné okno, použijte volání:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);