Amb la millora de les tecnologies de visualització gràfica, l'API dels sistemes operatius també va millorar, proporcionant als programadors més i més oportunitats per desenvolupar elements d'interfície no estàndard. Per tant, una de les innovacions del sistema operatiu Windows 2000 eren les finestres en capes, algunes de les quals podien ser translúcides. Aviat, una descripció de l'API per treballar amb finestres en capes va estar disponible a MSDN. No obstant això, als fòrums de programadors, encara es fan preguntes sobre com fer que una finestra semitransparent.
Necessari
- - compilador;
- - Windows SDK o framework per a la programació de Windows.
Instruccions
Pas 1
Aconseguiu un mànec a la finestra que vulgueu fer semi-transparent. Cerqueu o creeu una finestra. Per crear-lo, utilitzeu les funcions API CreateWindow, CreateWindowEx o els mètodes d'embolcall al voltant d'aquestes funcions que pertanyen a les classes del marc utilitzat. El prototip de la funció CreateWindow té aquest aspecte:
HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nAltura,
HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
Com podeu veure, la funció retorna un identificador a la finestra creada com a resultat de l'execució. Si s'utilitza alguna classe d'embolcall, utilitzeu els seus mètodes a l'objecte corresponent a la finestra creada per obtenir el controlador.
Pas 2
La cerca d’una finestra es pot fer mitjançant trucades API FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows i les seves combinacions. Podeu obtenir un controlador d'una finestra dins d'una àrea específica mitjançant les funcions WindowFromPoint i ChildWindowFromPoint.
Pas 3
Establiu la finestra a l'estil ampliat WS_EX_LAYERED. Utilitzeu l'API SetWindowLong o els mètodes corresponents d'objectes d'embolcall. La funció SetWindowLong substitueix completament la informació modificable dels paràmetres de la finestra, de manera que utilitzeu-la en combinació amb la funció GetWindowLong per recuperar el valor anterior del conjunt de senyals d’estil. Per exemple, l'estil es pot canviar així:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Aquí hWnd és el controlador de la finestra que es troba com a resultat de realitzar les accions descrites al pas anterior.
Pas 4
Feu que la finestra sigui semitransparent. Utilitzeu l'API SetLayeredWindowAttributes o els mètodes de les classes d'embolcall. El prototip de la funció SetLayeredWindowAttributes té aquest aspecte:
BOOL SetLayeredWindowAttributes (HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
Pas 5
El paràmetre hwnd de la funció ha de ser un controlador de finestra vàlid obtingut al primer pas. El paràmetre crKey és una clau de color que s'utilitza per definir àrees semitransparents. El paràmetre bAlpha especifica el valor de translucidesa. Amb el valor del paràmetre bAlpha igual a 0, les àrees "semitransparents" seran totalment transparents. Si el paràmetre bAlpha és 255, seran completament opacs. El paràmetre dwFlags determina el mode de visualització posterior del contingut de la finestra. Quan s'inclou el senyalador LWA_COLORKEY al valor dwFlags, les àrees semitransparents de la finestra es determinaran en funció de la tecla de color. Quan el senyalador LWA_ALPHA està habilitat, s'utilitzarà el paràmetre bAlpha per determinar el valor de translucidesa.
Pas 6
Per fer que tota la finestra sigui semitransparent, truqueu a SetLayeredWindowAttributes amb el valor del paràmetre bAlpha preferit, el senyalador LWA_ALPHA, però sense cap senyalador LWA_COLORKEY. Utilitzeu el controlador de finestra trobat com a primer paràmetre de la funció. Per exemple, per fer una finestra mig transparent, utilitzeu la trucada:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);