Cum Se Face O Fereastră Semitransparentă

Cuprins:

Cum Se Face O Fereastră Semitransparentă
Cum Se Face O Fereastră Semitransparentă

Video: Cum Se Face O Fereastră Semitransparentă

Video: Cum Se Face O Fereastră Semitransparentă
Video: Cum se face o fereastra? Realizarea acestea de la 0 pina la instalare. 2024, Mai
Anonim

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ă.

Cum se face o fereastră semitransparentă
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);

Recomandat: