Pamoja na uboreshaji wa teknolojia za kuonyesha picha, API ya mifumo ya uendeshaji pia iliboresha, ikitoa programu kwa fursa zaidi na zaidi za kukuza vitu visivyo kawaida vya kiolesura. Kwa hivyo moja ya ubunifu wa mfumo wa uendeshaji wa Windows 2000 ilikuwa madirisha yaliyopangwa, ambayo sehemu zake zinaweza kuwa nyembamba. Hivi karibuni, maelezo ya API ya kufanya kazi na windows layered yalipatikana kwenye MSDN. Walakini, kwenye vikao vya waandaaji wa programu, maswali juu ya jinsi ya kutengeneza dirisha wazi zaidi yanaulizwa.
Muhimu
- mkusanyaji;
- - windows sdk au mfumo wa programu ya windows.
Maagizo
Hatua ya 1
Pata kushughulikia kwa dirisha unalotaka kufanya nusu-uwazi. Pata au unda dirisha. Kuiunda, tumia kazi ya CreateWindow, CreateWindowEx API, au njia za kufunika karibu na kazi hizi za darasa la mfumo uliotumiwa. Mfano wa kazi ya CreateWindow inaonekana kama hii:
Unda Window ya HWND (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, upana upana, urefu, HWND hWndParent, HMENU hMenu, HINSTANCE hVitu,
LPVOID lpParam);
Kama unavyoona, kazi inarudisha kipini kwenye dirisha lililoundwa kama matokeo ya utekelezaji. Ikiwa darasa lolote la kufunika limetumika, tumia njia zake kwenye kitu kinacholingana na dirisha iliyoundwa ili kupata kipini.
Hatua ya 2
Kupata dirisha kunaweza kufanywa kwa kutumia simu za API FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows, na mchanganyiko wao. Unaweza kupata kipini kwa dirisha ndani ya eneo maalum kwa kutumia kazi za WindowFromPoint na ChildWindowFromPoint.
Hatua ya 3
Weka dirisha kwa mtindo uliopanuliwa WS_EX_LAYERED. Tumia SetWindowLong API au njia zinazofanana za vitu vya kufunika. Kazi ya SetWindowLong inachukua nafasi kabisa ya habari inayoweza kubadilika ya kidirisha, kwa hivyo itumie pamoja na kazi ya GetWindowLong ili kupata tena dhamana ya seti ya bendera za mitindo. Kwa mfano, mtindo unaweza kubadilishwa kama hii:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Hapa hWnd ni kipini cha dirisha kinachopatikana kama matokeo ya kutekeleza vitendo vilivyoelezewa katika hatua ya awali.
Hatua ya 4
Fanya dirisha iwe wazi. Tumia SetLayeredWindowAttributes API au njia za darasa za kufunika. Aina ya kazi ya SetLayeredWindowAttributes inaonekana kama hii:
Sifa za BOOL Zilizowekwa kwenyeWindow
HWND hwnd, COLORREF crKifunguo, Alpha ya ALB, DWORD dwFlags);
Hatua ya 5
Kigezo cha hwnd kwa kazi lazima iwe kipini halali cha dirisha kilichopatikana katika hatua ya kwanza. Kigezo cha crKey ni ufunguo wa rangi unaotumiwa kufafanua maeneo yenye uwazi. Kigezo cha alpha kinabainisha thamani ya uwazi. Na thamani ya parameta ya Alfa sawa na 0, maeneo ya "nusu wazi" yatakuwa wazi kabisa. Ikiwa parameta ya bAlpha ni 255, itakuwa laini kabisa. Vigezo vya dwFlags huamua hali ya kuonyesha zaidi ya yaliyomo kwenye dirisha. Wakati bendera ya LWA_COLORKEY imejumuishwa katika thamani ya dwFlags, maeneo ya uwazi ya dirisha yataamua kulingana na ufunguo wa rangi. Wakati bendera ya LWA_ALPHA imewezeshwa, kigezo cha bAlpha kitatumika kuamua thamani ya mabadiliko.
Hatua ya 6
Ili kufanya dirisha zima liwe wazi kabisa, piga SetLayeredWindowAttribute na thamani ya parameta ya bAlpha, bendera ya LWA_ALPHA, lakini hakuna bendera ya LWA_COLORKEY. Tumia kipini cha dirisha kilichopatikana kama kigezo cha kwanza cha kazi. Kwa mfano, kufanya dirisha kuwa wazi nusu, tumia simu:
:: SetLayeredWindowAttribute (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);