Sa pagpapabuti ng mga graphic display na teknolohiya, ang API ng mga operating system ay napabuti din, na nagbibigay ng mga programmer ng higit pa at maraming mga pagkakataon para sa pagbuo ng mga hindi karaniwang elemento ng interface. Kaya't ang isa sa mga makabagong ideya ng operating system ng Windows 2000 ay ang mga layered windows, na ang mga bahagi ay maaaring translucent. Di-nagtagal, isang paglalarawan ng API para sa pagtatrabaho sa mga layered windows ay magagamit sa MSDN. Gayunpaman, sa mga forum ng mga programmer, ang mga katanungan tungkol sa kung paano gumawa ng isang window na semi-transparent ay tinanong pa rin.
Kailangan
- - tagatala;
- - windows sdk o framework para sa windows program.
Panuto
Hakbang 1
Kumuha ng hawakan sa window na nais mong gawing semi-transparent. Maghanap o lumikha ng isang window. Upang likhain ito, gamitin ang alinman sa mga pag-andar ng CreateWindow, CreateWindowEx API, o ang mga pamamaraan ng pambalot sa paligid ng mga pagpapaandar na ito na kabilang sa mga klase ng ginamit na balangkas. Ang prototype para sa pag-andar ng CreateWindow ay ganito:
HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y,
int nWidth, int n Taas, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
Tulad ng nakikita mo, ang function ay nagbabalik ng isang hawakan sa nilikha window bilang resulta ng pagpapatupad. Kung ang anumang klase ng pambalot ay ginamit, gamitin ang mga pamamaraan nito sa bagay na naaayon sa nilikha na window upang makuha ang hawakan.
Hakbang 2
Ang paghahanap ng isang window ay maaaring gawin gamit ang mga tawag sa API na FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows, at ang kanilang mga kumbinasyon. Maaari kang makakuha ng hawakan sa isang window sa loob ng isang tukoy na lugar gamit ang mga pagpapaandar ng WindowFromPoint at ChildWindowFromPoint.
Hakbang 3
Itakda ang window sa pinalawig na istilong WS_EX_LAYERED. Gamitin ang SetWindowLong API o ang mga kaukulang pamamaraan ng mga bagay na pambalot. Ang SetWindowLong function na ganap na pumapalit sa nababago na impormasyon ng parameter ng window, kaya gamitin ito kasama ng pagpapaandar na GetWindowLong upang makuha ang nakaraang halaga para sa hanay ng mga style flag. Halimbawa, ang istilo ay maaaring baguhin tulad nito:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Narito ang hWnd ay nahanap ang hawakan ng window bilang isang resulta ng pagsasagawa ng mga pagkilos na inilarawan sa nakaraang hakbang.
Hakbang 4
Gawin ang window na semi-transparent. Gamitin ang SetLayeredWindowAttributang API o mga pamamaraan ng mga klase ng pambalot. Ang SetLayeredWindowAttributing function na prototype ay ganito:
BOOL SetLayeredWindowAttribut (HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
Hakbang 5
Ang hwnd parameter sa pagpapaandar ay dapat na isang wastong hawakan ng window na nakuha sa unang hakbang. Ang parameter ng crKey ay isang kulay ng susi na ginamit upang tukuyin ang mga semi-transparent na lugar. Tinutukoy ng parameter ng bAlpha ang halaga ng translucency. Sa halagang parameter ng bAlpha na katumbas ng 0, ang mga "semi-transparent" na lugar ay magiging ganap na transparent. Kung ang parameter ng bAlpha ay 255, sila ay magiging ganap na hindi malabo. Tinutukoy ng parameter ng dwFlags ang mode ng karagdagang pagpapakita ng mga nilalaman ng window. Kapag ang flag ng LWA_COLORKEY ay kasama sa halaga ng dwFlags, matutukoy ang mga semitransparent na lugar ng window batay sa key ng kulay. Kapag pinagana ang watawat ng LWA_ALPHA, gagamitin ang parameter ng bAlpha upang matukoy ang halaga ng translucency.
Hakbang 6
Upang gawing semi-transparent ang buong window, tawagan ang SetLayeredWindowAttribut na may ginustong halaga ng parameter ng bAlpha, ang flag ng LWA_ALPHA, ngunit walang flag ng LWA_COLORKEY. Gamitin ang nahanap na hawakan ng window bilang unang parameter sa pagpapaandar. Halimbawa, upang gawing transparent ang isang window, gamitin ang tawag:
:: SetLayeredWindowAttribut (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);