Ինչպես պատրաստել պատուհանը կիսաթափանցիկ

Բովանդակություն:

Ինչպես պատրաստել պատուհանը կիսաթափանցիկ
Ինչպես պատրաստել պատուհանը կիսաթափանցիկ

Video: Ինչպես պատրաստել պատուհանը կիսաթափանցիկ

Video: Ինչպես պատրաստել պատուհանը կիսաթափանցիկ
Video: Как штукатурить откосы на окнах СВОИМИ РУКАМИ 2024, Մայիս
Anonim

Գրաֆիկական ցուցադրման տեխնոլոգիաների կատարելագործման հետ մեկտեղ բարելավվեց նաև գործառնական համակարգերի API- ն ՝ ծրագրավորողներին ավելի ու ավելի շատ հնարավորություններ ընձեռելով ոչ ստանդարտ ինտերֆեյսային տարրերի մշակման համար: Այսպիսով, Windows 2000 գործառնական համակարգի նորամուծություններից մեկը շերտավորված պատուհաններն էին, որոնց մասերը կարող էին կիսաթափանցիկ լինել: Շուտով MSDN- ում հասանելի դարձավ շերտավոր պատուհանների հետ աշխատելու API- ի նկարագրությունը: Այնուամենայնիվ, ծրագրավորողների ֆորումներում դեռ հարցեր են տրվում, թե ինչպես պատուհանը դարձնել կիսաթափանցիկ:

Ինչպես պատրաստել պատուհանը կիսաթափանցիկ
Ինչպես պատրաստել պատուհանը կիսաթափանցիկ

Անհրաժեշտ է

  • - կազմող;
  • - windows sdk կամ windows ծրագրի ծրագրավորման շրջանակ:

Հրահանգներ

Քայլ 1

Բռնեք դեպի այն պատուհանը, որը ցանկանում եք կիսաթափանցիկ դարձնել: Գտեք կամ ստեղծեք պատուհան: Այն ստեղծելու համար օգտագործեք կամ CreateWindow, CreateWindowEx API գործառույթները կամ օգտագործված շրջանակի դասերին պատկանող այս գործառույթների շուրջ փաթաթելու մեթոդները: CreateWindow գործառույթի նախատիպն ունի այսպիսի տեսք.

HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int n Լայնությունը, int n Բարձրությունը,

HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);

Ինչպես տեսնում եք, գործառույթը կատարման արդյունքում բռնակը վերադարձնում է ստեղծված պատուհանի: Եթե օգտագործվում է ցանկացած փաթաթման դաս, բռնակը ստանալու համար օգտագործիր դրա մեթոդները ստեղծված պատուհանին համապատասխան օբյեկտի վրա:

Քայլ 2

Պատուհան գտնելը կարող է կատարվել ՝ օգտագործելով FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows, API զանգերը և դրանց համադրությունները: Դուք կարող եք բռնակ ձեռք բերել դեպի որոշակի պատուհանի պատուհան `օգտագործելով WindowFromPoint և ChildWindowFromPoint գործառույթները:

Քայլ 3

Պատուհանը դրեք WS_EX_LAYERED ընդլայնված ոճին: Օգտագործեք SetWindowLong API- ն կամ փաթաթելու օբյեկտների համապատասխան մեթոդները: SetWindowLong գործառույթն ամբողջությամբ փոխարինում է փոփոխվող պատուհանի պարամետրի տեղեկատվությանը, այնպես որ այն օգտագործեք GetWindowLong գործառույթի հետ համատեղ ՝ ստեղների դրոշների հավաքածուի համար նախկին արժեքը ստանալու համար: Օրինակ, ոճը կարելի է փոխել այսպես.

:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));

Այստեղ hWnd- ը նախորդ քայլում նկարագրված գործողությունների կատարման արդյունքում հայտնաբերված պատուհանի բռնակն է:

Քայլ 4

Պատուհանը կիսաթափանցիկ դարձրեք: Օգտագործեք SetLayeredWindowAttributes API կամ փաթաթման դասերի մեթոդներ: SetLayeredWindowAttributes գործառույթի նախատիպն ունի նման տեսք.

BOOL SetLayeredWindowAttributes (HWND հվնդ, COLORREF crKey, BYTE բալա, DWORD dwFlags);

Քայլ 5

Գործառույթի hwnd պարամետրը պետք է լինի պատուհանի վավեր բռնակ, որը ձեռք է բերվել առաջին քայլում: CrKey պարամետրը գունային բանալի է, որն օգտագործվում է կիսաթափանցիկ տարածքներ սահմանելու համար: BAlpha պարամետրը սահմանում է կիսաթափանցիկության արժեքը: BAlpha պարամետրի արժեքը հավասար է 0-ի, «կիսաթափանցիկ» տարածքները կլինեն ամբողջովին թափանցիկ: Եթե bAlpha պարամետրը 255 է, դրանք ամբողջովին անթափանց կլինեն: DwFlags պարամետրը որոշում է պատուհանի պարունակության հետագա ցուցադրման ռեժիմը: Երբ LWA_COLORKEY դրոշը ներառվի dwFlags արժեքի մեջ, պատուհանի կիսաթափանցիկ տարածքները որոշվելու են գունային ստեղնի հիման վրա: Երբ LWA_ALPHA դրոշը միացված է, bAlpha պարամետրը կօգտագործվի կիսաթափանցիկության արժեքը որոշելու համար:

Քայլ 6

Ամբողջ պատուհանը կիսաթափանցիկ դարձնելու համար զանգահարեք SetLayeredWindowAttributes ՝ նախընտրելի bAlpha պարամետրի արժեքով, LWA_ALPHA դրոշով, բայց ոչ LWA_COLORKEY դրոշով: Օգտագործեք գտնված պատուհանի բռնակը որպես գործառույթի առաջին պարամետր: Օրինակ, պատուհանը կիսաթափանցիկ դարձնելու համար օգտագործեք զանգը.

:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);

Խորհուրդ ենք տալիս: