Hoe Om 'n Venster Semi-deursigtig Te Maak

INHOUDSOPGAWE:

Hoe Om 'n Venster Semi-deursigtig Te Maak
Hoe Om 'n Venster Semi-deursigtig Te Maak

Video: Hoe Om 'n Venster Semi-deursigtig Te Maak

Video: Hoe Om 'n Venster Semi-deursigtig Te Maak
Video: Plastic hellingen op het balkonblok 2024, Mei
Anonim

Met die verbetering van grafiese vertoningstegnologieë het die API van bedryfstelsels ook verbeter, wat programmeerders meer en meer geleenthede bied om nie-standaard koppelvlakelemente te ontwikkel. Een van die innovasies van die Windows 2000-bedryfstelsel was dus lae vensters, waarvan dele deursigtig kon wees. Binnekort het 'n beskrywing van die API vir die werk met lae vensters op MSDN beskikbaar geword. Op programmeerdersforums word daar egter steeds vrae gevra oor hoe om 'n venster semi-deursigtig te maak.

Hoe om 'n venster halfdeursigtig te maak
Hoe om 'n venster halfdeursigtig te maak

Nodig

  • - samesteller;
  • - Windows SDK of raamwerk vir Windows-programmering.

Instruksies

Stap 1

Kry 'n handvatsel by die venster wat u deursigtig wil maak. Soek of skep 'n venster. Gebruik die CreateWindow-, CreateWindowEx API-funksies of die omslagmetodes rondom hierdie funksies wat deel uitmaak van die klasse van die gebruikte raamwerk om dit te skep. Die prototipe vir die CreateWindow-funksie lyk soos volg:

HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWydte, int nHoogte, HWND hWndParent,

HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);

Soos u kan sien, gee die funksie 'n handgreep terug na die venster wat geskep is as gevolg van uitvoering. As 'n wikkelklas gebruik word, gebruik die metodes op die voorwerp wat ooreenstem met die venster wat geskep is om die handvatsel te kry.

Stap 2

Die vind van 'n venster kan gedoen word met behulp van API-oproepe FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows en hul kombinasies. U kan 'n venster binne 'n spesifieke gebied hanteer deur die funksies WindowFromPoint en ChildWindowFromPoint te gebruik.

Stap 3

Stel die venster op die uitgebreide styl WS_EX_LAYERED. Gebruik die SetWindowLong API of die ooreenstemmende metodes van omslagvoorwerpe. Die SetWindowLong-funksie vervang die aanpasbare vensterparameterinligting volledig, dus gebruik dit in kombinasie met die GetWindowLong-funksie om die vorige waarde vir die stel stylvlae op te haal. Die styl kan byvoorbeeld so verander word:

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

Hier is hWnd die vensterhandvatsel wat gevind word as gevolg van die uitvoering van die aksies wat in die vorige stap beskryf is.

Stap 4

Maak die venster halfdeursigtig. Gebruik die SetLayeredWindowAttributes API of metodes van die omslagklasse. Die SetLayeredWindowAttributes-funksie-prototipe lyk soos volg:

BOOL SetLayeredWindowAttribute (HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwVlae);

Stap 5

Die parameter hwnd aan die funksie moet 'n geldige vensterhandvatsel wees wat in die eerste stap verkry is. Die parameter crKey is 'n kleursleutel wat gebruik word om semi-deursigtige gebiede te definieer. Die parameter bAlpha spesifiseer die deurskyningswaarde. Met die bAlpha-parameterwaarde gelyk aan 0, sal die "semi-deursigtige" gebiede heeltemal deursigtig wees. As die bAlpha-parameter 255 is, sal hulle heeltemal ondeursigtig wees. Die parameter dwFlags bepaal die modus om die vensterinhoud verder te vertoon. Wanneer die LWA_COLORKEY-vlag in die dwFlags-waarde opgeneem word, word die halfdoorsigtige dele van die venster bepaal op grond van die kleursleutel. Wanneer die LWA_ALPHA-vlag geaktiveer is, sal die bAlpha-parameter gebruik word om die deurskyningswaarde te bepaal.

Stap 6

Om die hele venster semi-deursigtig te maak, skakel SetLayeredWindowAttributes met die voorkeurwaarde bAlpha-parameter, die LWA_ALPHA-vlag, maar geen LWA_COLORKEY-vlag nie. Gebruik die venstervenster wat gevind is as die eerste parameter vir die funksie. Gebruik byvoorbeeld die oproep om 'n venster half deursigtig te maak:

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

Aanbeveel: