Odată cu îmbunătățirea tehnologiilor de afișare grafică, API-ul sistemelor de operare s-a îmbunătățit, oferind programatorilor tot mai multe oportunități de dezvoltare a elementelor de interfață non-standard. Deci, una dintre inovațiile sistemului de operare Windows 2000 a fost ferestrele stratificate, ale căror părți ar putea fi translucide. În curând, o descriere a API-ului pentru lucrul cu ferestrele stratificate a devenit disponibilă pe MSDN. Cu toate acestea, pe forumurile programatorilor, încă se pun întrebări despre cum se face o fereastră semitransparentă.
Necesar
- - compilator;
- - Windows SDK sau cadru pentru programarea Windows.
Instrucțiuni
Pasul 1
Aduceți un mâner la fereastra pe care doriți să o faceți semi-transparentă. Găsiți sau creați o fereastră. Pentru a-l crea, utilizați fie funcțiile CreateWindow, CreateWindowEx API, fie metodele de împachetare din jurul acestor funcții aparținând claselor cadrului utilizat. Prototipul pentru funcția CreateWindow arată astfel:
HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nLățime, int nÎnălțime,
HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
După cum puteți vedea, funcția returnează un mâner ferestrei create ca rezultat al execuției. Dacă se folosește orice clasă de împachetare, utilizați metodele sale pe obiectul corespunzător ferestrei create pentru a obține mânerul.
Pasul 2
Găsirea unei ferestre se poate face folosind apelurile API FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows și combinațiile acestora. Puteți obține un mâner către o fereastră dintr-o anumită zonă utilizând funcțiile WindowFromPoint și ChildWindowFromPoint.
Pasul 3
Setați fereastra la stilul extins WS_EX_LAYERED. Utilizați API-ul SetWindowLong sau metodele corespunzătoare de obiecte wrapper. Funcția SetWindowLong înlocuiește complet informațiile modificabile ale parametrilor ferestrei, deci utilizați-le în combinație cu funcția GetWindowLong pentru a recupera valoarea anterioară pentru setul de steaguri de stil. De exemplu, stilul poate fi schimbat astfel:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Aici hWnd este mânerul ferestrei găsit ca urmare a efectuării acțiunilor descrise în pasul anterior.
Pasul 4
Faceți fereastra semitransparentă. Utilizați API-ul SetLayeredWindowAttributes sau metodele claselor wrapper. Prototipul funcției SetLayeredWindowAttributes arată astfel:
BOOL SetLayeredWindowAttributes (HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
Pasul 5
Parametrul hwnd al funcției trebuie să fie un handle valid al ferestrei obținut în primul pas. Parametrul crKey este o cheie de culoare utilizată pentru a defini zonele semi-transparente. Parametrul bAlpha specifică valoarea translucidității. Cu valoarea parametrului bAlpha egală cu 0, zonele „semi-transparente” vor fi complet transparente. Dacă parametrul bAlpha este 255, vor fi complet opaci. Parametrul dwFlags determină modul de afișare suplimentară a conținutului ferestrei. Când semnalizatorul LWA_COLORKEY este inclus în valoarea dwFlags, zonele semitransparente ale ferestrei vor fi determinate pe baza tastei de culoare. Când semnalizatorul LWA_ALPHA este activat, parametrul bAlpha va fi utilizat pentru a determina valoarea translucidității.
Pasul 6
Pentru a face întreaga fereastră semitransparentă, apelați SetLayeredWindowAttributes cu valoarea parametrului bAlpha preferat, steagul LWA_ALPHA, dar fără steagul LWA_COLORKEY Utilizați mânerul ferestrei găsite ca prim parametru al funcției. De exemplu, pentru a face o fereastră pe jumătate transparentă, utilizați apelul:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);