Med forbedringen av grafiske skjermteknologier ble API-en til operativsystemene også forbedret, og gir programmerere flere og flere muligheter for å utvikle ikke-standard grensesnittelementer. Så en av nyhetene til Windows 2000-operativsystemet var lagdelte vinduer, hvor deler kunne være gjennomsiktige. Snart ble en beskrivelse av API for arbeid med lagdelte vinduer tilgjengelig på MSDN. På programmørfora blir det likevel stilt spørsmål om hvordan du lager et vindu semi-transparent.
Nødvendig
- - kompilator;
- - Windows SDK eller rammeverk for Windows-programmering.
Bruksanvisning
Trinn 1
Få et håndtak i vinduet du vil gjøre semi-transparent. Finn eller opprett et vindu. For å opprette den, bruk enten CreateWindow, CreateWindowEx API-funksjonene eller innpakningsmetodene rundt disse funksjonene som tilhører klassene i det brukte rammeverket. Prototypen for CreateWindow-funksjonen ser slik ut:
HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nBredde, int nHøyde, HWND hWndParent,
HMENU hMeny, HINSTANCE hInstance, LPVOID lpParam);
Som du kan se, returnerer funksjonen et håndtak til det opprettede vinduet som et resultat av utførelsen. Hvis det brukes noen wrapper-klasse, bruk metodene på objektet som tilsvarer det opprettede vinduet for å få tak i håndtaket.
Steg 2
Å finne et vindu kan gjøres ved hjelp av API-anrop FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows og deres kombinasjoner. Du kan håndtere et vindu innenfor et bestemt område ved hjelp av funksjonene WindowFromPoint og ChildWindowFromPoint.
Trinn 3
Sett vinduet til den utvidede stilen WS_EX_LAYERED. Bruk SetWindowLong API eller tilsvarende metoder for innpakningsobjekter. SetWindowLong-funksjonen erstatter den modifiserbare vinduparameterinformasjonen, så bruk den i kombinasjon med GetWindowLong-funksjonen for å hente den forrige verdien for settet med stilflagg. For eksempel kan stilen endres slik:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Her er HWnd vinduhåndtaket funnet som et resultat av å utføre handlingene som er beskrevet i forrige trinn.
Trinn 4
Gjør vinduet halvgjennomsiktig. Bruk SetLayeredWindowAttributes API eller metoder for wrapper-klassene. SetLayeredWindowAttributes-funksjonstypen ser slik ut:
BOOL SetLayeredWindowAttributes (HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlagg);
Trinn 5
Hwnd-parameteren til funksjonen må være et gyldig vindushåndtak oppnådd i første trinn. Parameteren crKey er en fargetast som brukes til å definere semi-gjennomsiktige områder. Parameteren bAlpha spesifiserer gjennomsiktighetsverdien. Med bAlpha-parameterverdien lik 0, vil de "semi-transparente" områdene være helt gjennomsiktige. Hvis bAlpha-parameteren er 255, vil de være helt ugjennomsiktige. Parameteren dwFlags bestemmer modus for videre visning av vinduinnholdet. Når LWA_COLORKEY-flagget er inkludert i dwFlags-verdien, vil de halvtransparente områdene i vinduet bli bestemt ut fra fargetasten. Når LWA_ALPHA-flagget er aktivert, vil bAlpha-parameteren brukes til å bestemme gjennomsiktighetsverdien.
Trinn 6
For å gjøre hele vinduet halvgjennomsiktig, ring SetLayeredWindowAttributter med den foretrukne bAlpha-parameterverdien, LWA_ALPHA-flagget, men ingen LWA_COLORKEY-flagg. Bruk det funnet vinduhåndtaket som den første parameteren til funksjonen. For eksempel, for å gjøre et vindu halvt gjennomsiktig, bruk samtalen:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);