Met de verbetering van grafische weergavetechnologieën is ook de API van besturingssystemen verbeterd, waardoor programmeurs steeds meer mogelijkheden krijgen om niet-standaard interface-elementen te ontwikkelen. Dus een van de innovaties van het Windows 2000-besturingssysteem waren gelaagde vensters, waarvan delen doorschijnend konden zijn. Al snel kwam een beschrijving van de API voor het werken met gelaagde vensters beschikbaar op MSDN. Op programmeursforums worden echter nog steeds vragen gesteld over het semi-transparant maken van een venster.
Noodzakelijk
- - compiler;
- - windows sdk of framework voor Windows-programmering.
instructies:
Stap 1
Krijg een handvat aan het venster dat u semi-transparant wilt maken. Zoek of maak een venster. Om het te maken, gebruikt u de CreateWindow-, CreateWindowEx API-functies of de wrapper-methoden rond deze functies die behoren tot de klassen van het gebruikte framework. Het prototype voor de functie CreateWindow ziet er als volgt uit:
HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nBreedte, int nHoogte,
HWND hWndOuder, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
Zoals u kunt zien, retourneert de functie een handvat naar het gemaakte venster als resultaat van uitvoering. Als een wrapper-klasse wordt gebruikt, gebruik dan de methoden op het object dat overeenkomt met het gemaakte venster om de handle te krijgen.
Stap 2
Het vinden van een venster kan worden gedaan met behulp van API-aanroepen FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows en hun combinaties. Met de functies WindowFromPoint en ChildWindowFromPoint kunt u een venster binnen een specifiek gebied in handen krijgen.
Stap 3
Stel het venster in op de uitgebreide stijl WS_EX_LAYERED. Gebruik de SetWindowLong API of de overeenkomstige methoden van wrapper-objecten. De functie SetWindowLong vervangt de aanpasbare vensterparameterinformatie volledig, dus gebruik deze in combinatie met de functie GetWindowLong om de vorige waarde voor de set stijlvlaggen op te halen. De stijl kan bijvoorbeeld als volgt worden gewijzigd:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Hier is hWnd de venstergreep die is gevonden als gevolg van het uitvoeren van de acties die in de vorige stap zijn beschreven.
Stap 4
Maak het venster semi-transparant. Gebruik de SetLayeredWindowAttributes API of methoden van de wrapper-klassen. Het prototype van de functie SetLayeredWindowAttributes ziet er als volgt uit:
BOOL SetLayeredWindowAttributes (HWND hwnd, KLEURRIJK crKey, BYTE bAlfa, DWORD dwFlags);
Stap 5
De hwnd-parameter voor de functie moet een geldige vensterhandle zijn die in de eerste stap is verkregen. De parameter crKey is een kleurtoets die wordt gebruikt om semi-transparante gebieden te definiëren. De parameter bAlpha specificeert de translucentiewaarde. Met de bAlpha parameterwaarde gelijk aan 0, zullen de "semi-transparante" gebieden volledig transparant zijn. Als de bAlpha-parameter 255 is, zijn ze volledig ondoorzichtig. De parameter dwFlags bepaalt de modus voor verdere weergave van de vensterinhoud. Wanneer de LWA_COLORKEY-vlag is opgenomen in de dwFlags-waarde, worden de semitransparante gebieden van het venster bepaald op basis van de kleursleutel. Wanneer de LWA_ALPHA-vlag is ingeschakeld, wordt de bAlpha-parameter gebruikt om de translucentiewaarde te bepalen.
Stap 6
Om het hele venster semi-transparant te maken, roept u SetLayeredWindowAttributes aan met de gewenste bAlpha-parameterwaarde, de LWA_ALPHA-vlag, maar geen LWA_COLORKEY-vlag. Gebruik de gevonden venstergreep als de eerste parameter voor de functie. Om bijvoorbeeld een venster half transparant te maken, gebruik je de aanroep:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);