Hvordan Man Laver Et Vindue Semi-transparent

Indholdsfortegnelse:

Hvordan Man Laver Et Vindue Semi-transparent
Hvordan Man Laver Et Vindue Semi-transparent

Video: Hvordan Man Laver Et Vindue Semi-transparent

Video: Hvordan Man Laver Et Vindue Semi-transparent
Video: КАК ПРОНЕСТИ СЛАДОСТИ в ПСИХБОЛЬНИЦУ Джокеру!? ДОЧКА СТРАШНОГО КЛОУНА и Харли спасает Джокера! 2024, Kan
Anonim

Med forbedringen af grafiske displayteknologier forbedredes også operativsystemernes API, hvilket giver programmører flere og flere muligheder for at udvikle ikke-standard interfaceelementer. Så en af innovationerne i Windows 2000-operativsystemet var lagdelt vinduer, hvoraf dele kunne være gennemsigtige. Snart blev en beskrivelse af API'en til arbejde med lagdelte vinduer tilgængelig på MSDN. På programmørfora stilles der dog stadig spørgsmål om, hvordan man laver et vindue semitransparent.

Hvordan man laver et vindue semi-transparent
Hvordan man laver et vindue semi-transparent

Nødvendig

  • - kompilator;
  • - Windows SDK eller ramme til Windows-programmering.

Instruktioner

Trin 1

Få et håndtag til det vindue, du vil gøre semi-gennemsigtig. Find eller opret et vindue. For at oprette det skal du enten bruge CreateWindow, CreateWindowEx API-funktionerne eller indpakningsmetoderne omkring disse funktioner, der hører til klasserne i den anvendte ramme. Prototypen til CreateWindow-funktionen ser sådan ud:

HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nBredde, int nHøjde,

HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);

Som du kan se, returnerer funktionen et håndtag til det oprettede vindue som resultat af udførelse. Hvis der anvendes en indpakningsklasse, skal du bruge dens metoder på det objekt, der svarer til det oprettede vindue, for at få fat i håndtaget.

Trin 2

At finde et vindue kan gøres ved hjælp af API-opkald FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows og deres kombinationer. Du kan få fat i et vindue inden for et bestemt område ved hjælp af funktionerne WindowFromPoint og ChildWindowFromPoint.

Trin 3

Indstil vinduet til den udvidede stil WS_EX_LAYERED. Brug SetWindowLong API eller de tilsvarende metoder til indpakningsobjekter. SetWindowLong-funktionen erstatter fuldstændigt de modificerbare vinduesparameteroplysninger, så brug den i kombination med GetWindowLong-funktionen til at hente den tidligere værdi for sættet med stilflag. For eksempel kan stilen ændres således:

:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));

Her er hWnd vindueshåndtaget fundet som et resultat af at udføre de handlinger, der er beskrevet i det foregående trin.

Trin 4

Gør vinduet halvgennemsigtigt. Brug SetLayeredWindowAttributes API eller metoder til indpakningsklasser. SetLayeredWindowAttributes-funktionsprototypen ser sådan ud:

BOOL SetLayeredWindowAttributter (HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlag);

Trin 5

Hwnd-parameteren til funktionen skal være et gyldigt vinduesgreb opnået i første trin. Parameteren crKey er en farvetast, der bruges til at definere semi-transparente områder. Parameteren bAlpha angiver gennemsigtighedsværdien. Med bAlpha-parameterværdien lig med 0, vil de "semi-transparente" områder være fuldstændig gennemsigtige. Hvis bAlpha-parameteren er 255, vil de være helt uigennemsigtige. Parameteren dwFlags bestemmer tilstanden for yderligere visning af vindueindholdet. Når LWA_COLORKEY-flag er inkluderet i værdien dwFlags, bestemmes de halvgennemsigtige områder i vinduet ud fra farvetasten. Når LWA_ALPHA-flag er aktiveret, bruges bAlpha-parameteren til at bestemme gennemsigtighedsværdien.

Trin 6

For at gøre hele vinduet halvgennemsigtigt skal du ringe til SetLayeredWindowAttributter med den foretrukne bAlpha-parameterværdi, LWA_ALPHA-flagget, men ikke LWA_COLORKEY-flag. Brug det fundne vindueshåndtag som den første parameter til funktionen. For eksempel, hvis du vil gøre et vindue halvt gennemsigtigt, skal du bruge opkaldet:

:: SetLayeredWindowAttributter (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);

Anbefalede: