Graafiliste kuvamistehnoloogiate täiustumisega paranes ka opsüsteemide API, pakkudes programmeerijatele üha rohkem võimalusi mittestandardsete liideseelementide väljatöötamiseks. Nii et operatsioonisüsteemi Windows 2000 üheks uuenduseks olid kihilised aknad, mille osad võivad olla poolläbipaistvad. Varsti sai MSDN-is kättesaadavaks kihiliste akendega töötamise API kirjeldus. Kuid programmeerijate foorumites esitatakse endiselt küsimusi selle kohta, kuidas aken poolläbipaistvaks muuta.
Vajalik
- - koostaja;
- - Windowsi sdk või raamistik Windowsi programmeerimiseks.
Juhised
Samm 1
Hankige käepide aknale, mille soovite muuta poolläbipaistvaks. Leidke või looge aken. Selle loomiseks kasutage kas funktsioone CreateWindow, CreateWindowEx API-sid või nende raamistiku klassidesse kuuluvate funktsioonide ümbriste meetodeid. Funktsiooni CreateWindow prototüüp näeb välja selline:
HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu,
HINSTANCE hInstance, LPVOID lpParam);
Nagu näete, tagastab funktsioon täitmise tulemusena loodud aknasse käepideme. Kui kasutatakse mõnda mähiseklassi, kasutage käepideme saamiseks selle meetodeid loodud aknale vastaval objektil.
2. samm
Akna leidmiseks saab kasutada API-kõnesid FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows ja nende kombinatsioone. Konkreetse ala akna käepideme saate funktsioonide WindowFromPoint ja ChildWindowFromPoint abil.
3. samm
Määrake aken laiendatud stiiliks WS_EX_LAYERED. Kasutage SetWindowLong API-d või vastavaid ümbriseobjektide meetodeid. Funktsioon SetWindowLong asendab muudetava akna parameetri teabe täielikult, seega kasutage seda koos stiililippude komplekti eelmise väärtuse hankimiseks funktsiooniga GetWindowLong. Näiteks saab stiili muuta järgmiselt:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Siin on hWnd aknakäepide, mis leiti eelmises etapis kirjeldatud toimingute tegemise tulemusena.
4. samm
Tehke aken poolläbipaistvaks. Kasutage API-d SetLayeredWindowAttributes või ümbritsevate klasside meetodeid. Funktsiooni SetLayeredWindowAttributes prototüüp näeb välja selline:
BOOL SetLayeredWindowAttributes (HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
5. samm
Funktsiooni hwnd parameeter peab olema esimeses etapis saadud kehtiv akna käepide. Parameeter crKey on värviline võti, mida kasutatakse poolläbipaistvate alade määratlemiseks. Parameeter bAlpha määrab poolläbipaistvuse väärtuse. Kui bAlpha parameetri väärtus on 0, on "poolläbipaistvad" alad täiesti läbipaistvad. Kui bAlpha parameeter on 255, on need täiesti läbipaistmatud. Parameeter dwFlags määrab akna sisu edasise kuvamise viisi. Kui LWA_COLORKEY lipp lisatakse väärtusesse dwFlags, määratakse akna poolläbipaistvad alad värviklahvi põhjal. Kui lipp LWA_ALPHA on lubatud, kasutatakse poolläbipaistvuse väärtuse määramiseks parameetrit bAlpha.
6. samm
Kogu akna poolläbipaistvaks muutmiseks helistage SetLayeredWindowAttributes eelistatud bAlpha parameetri väärtusega, lipuga LWA_ALPHA, kuid mitte lipuga LWA_COLORKEY. Funktsiooni esimese parameetrina kasutage leitud akna käepidet. Näiteks akna pooleldi läbipaistvaks muutmiseks kasutage kõnet:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);