Tobulėjant grafinio atvaizdavimo technologijoms, pagerėjo ir operacinių sistemų API, programuotojams suteikiant vis daugiau galimybių kurti nestandartinius sąsajos elementus. Taigi viena iš „Windows 2000“operacinės sistemos naujovių buvo daugiasluoksniai langai, kurių dalys galėjo būti permatomos. Netrukus MSDN tapo prieinamas API su sluoksniuotais langais aprašas. Tačiau programuotojų forumuose vis dar klausiama, kaip padaryti langą pusiau skaidrų.
Būtinas
- - kompiliatorius;
- - „Windows SDK“arba „Windows“programavimo sistema.
Nurodymai
1 žingsnis
Gaukite lango, kurį norite padaryti pusiau skaidrų, rankeną. Raskite arba sukurkite langą. Norėdami jį sukurti, naudokite arba „CreateWindow“, „CreateWindowEx“API funkcijas, arba šių funkcijų apvyniojimo metodus, priklausančius naudojamos struktūros klasėms. Funkcijos „CreateWindow“prototipas atrodo taip:
HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, „DWORD dwStyle“, int x, int y, int nWidth
int nHeight, HWND hWndParent,
HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
Kaip matote, funkcija grąžina rankeną į sukurtą langą kaip vykdymo rezultatą. Jei naudojama kokia nors įvyniojimo klasė, naudokite jos metodus objekte, atitinkančiame sukurtą langą, kad gautumėte rankeną.
2 žingsnis
Langą galima rasti naudojant API skambučius „FindWindow“, „FindWindowEx“, „EnumWindows“, „EnumChildWindows“, „EnumThreadWindows“ir jų derinius. Galite gauti lango, esančio konkrečioje srityje, rankeną naudodami „WindowFromPoint“ir „ChildWindowFromPoint“funkcijas.
3 žingsnis
Nustatykite išplėstą lango stilių WS_EX_LAYERED. Naudokite „SetWindowLong“API arba atitinkamus apvalkalo objektų metodus. Funkcija „SetWindowLong“visiškai pakeičia modifikuojamą lango parametrų informaciją, todėl naudokite ją kartu su funkcija „GetWindowLong“, kad gautumėte ankstesnę stiliaus vėliavų rinkinio vertę. Pvz., Stilių galima pakeisti taip:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Čia „hWnd“yra lango rankena, rasta atlikus veiksmus, aprašytus ankstesniame žingsnyje.
4 žingsnis
Padarykite langą pusiau skaidrų. Naudokite „SetLayeredWindowAttributes“API arba „wrapper“klasių metodus. Funkcijos „SetLayeredWindowAttributes“prototipas atrodo taip:
BOOL SetLayeredWindowAttributes (HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
5 žingsnis
Funkcijos „hwnd“parametras turi būti tinkama lango rankena, gauta pirmame žingsnyje. Parametras „crKey“yra spalvų raktas, naudojamas apibrėžti pusiau permatomas sritis. Parametras „bAlpha“nurodo permatomumo vertę. Kai bAlpha parametro vertė lygi 0, „pusiau permatomos“sritys bus visiškai skaidrios. Jei „bAlpha“parametras yra 255, jie bus visiškai nepermatomi. Parametras „dwFlags“nustato tolesnio lango turinio rodymo režimą. Kai LWA_COLORKEY vėliava įtraukiama į „dwFlags“vertę, pusiau skaidrios lango sritys bus nustatomos pagal spalvų klavišą. Įjungus vėliavą LWA_ALPHA, permatomumo vertei nustatyti bus naudojamas parametras „bAlpha“.
6 žingsnis
Jei norite, kad visas langas būtų permatomas, iškvieskite „SetLayeredWindowAttributes“su pageidaujama „bAlpha“parametro verte, „LWA_ALPHA“vėliava, bet ne „LWA_COLORKEY“. Kaip pirmąjį funkcijos parametrą naudokite rastą lango rankeną. Pvz., Jei norite, kad langas būtų permatomas, naudokite skambutį:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);