Grafik displey texnologiyalari takomillashtirilishi bilan operatsion tizimlarning API-si ham yaxshilandi va dasturchilarga nostandart interfeys elementlarini rivojlantirish uchun ko'proq imkoniyatlar yaratdi. Shunday qilib, Windows 2000 operatsion tizimining yangiliklaridan biri qatlamlari oynalar bo'lib, ularning qismlari shaffof bo'lishi mumkin edi. Ko'p o'tmay, MSDN-da qatlamli oynalar bilan ishlash uchun API tavsifi mavjud bo'ldi. Biroq, dasturchilar forumlarida oynani qanday qilib yarim shaffof qilish haqida savollar berilmoqda.
Kerakli
- - kompilyator;
- - Windows sdk yoki Windows dasturlash uchun ramka.
Ko'rsatmalar
1-qadam
Yarim shaffof qilmoqchi bo'lgan derazadan dastani oling. Oynani toping yoki yarating. Uni yaratish uchun CreateWindow, CreateWindowEx API funktsiyalari yoki ishlatilgan ramka sinflariga tegishli ushbu funktsiyalar atrofidagi o'rash usullaridan foydalaning. CreateWindow funktsiyasi prototipi quyidagicha:
HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int n balandlik,
HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
Ko'rib turganingizdek, funktsiya bajarilishi natijasida yaratilgan oynaga dastani qaytaradi. Agar biron bir o'rash klassi ishlatilsa, dastakni olish uchun yaratilgan usulga mos keladigan ob'ektda uning usullaridan foydalaning.
2-qadam
Oynani topish API qo'ng'iroqlari yordamida amalga oshirilishi mumkin FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows va ularning kombinatsiyalari. WindowFromPoint va ChildWindowFromPoint funktsiyalari yordamida ma'lum bir maydon ichidagi oynaga ishlov beruvchini olishingiz mumkin.
3-qadam
Oynani WS_EX_LAYERED kengaytirilgan uslubiga o'rnating. SetWindowLong API yoki moslashtiruvchi moslamalarni moslashtirish usullaridan foydalaning. SetWindowLong funktsiyasi o'zgartirilishi mumkin bo'lgan oyna parametrlari ma'lumotlarini to'liq o'rnini bosadi, shuning uchun uslub bayroqlari to'plamining oldingi qiymatini olish uchun uni GetWindowLong funktsiyasi bilan birgalikda ishlating. Masalan, uslubni quyidagicha o'zgartirish mumkin:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Bu erda hWnd - oldingi bosqichda tavsiflangan harakatlarni bajarish natijasida topilgan oyna tutqichi.
4-qadam
Derazani yarim shaffof qiling. SetLayeredWindowAttributes API-sidan yoki o'rash sinflari usullaridan foydalaning. SetLayeredWindowAttributes funktsiya prototipi quyidagicha:
BOOL SetLayeredWindowAttributes (HWND hwnd, COLORREF crKey, BYTE alfa, DWORD dwFlags);
5-qadam
Funktsiyaning hwnd parametri birinchi bosqichda olingan haqiqiy oyna dastagi bo'lishi kerak. CrKey parametri - yarim shaffof joylarni aniqlash uchun ishlatiladigan rangli kalit. BAlpha parametri shaffoflik qiymatini belgilaydi. BAlpha parametr qiymati 0 ga teng bo'lsa, "yarim shaffof" joylar to'liq shaffof bo'ladi. Agar bAlpha parametri 255 bo'lsa, ular to'liq shaffof bo'lmaydi. DwFlags parametri oyna tarkibini keyingi ko'rsatish rejimini belgilaydi. DWFlags qiymatiga LWA_COLORKEY bayrog'i kiritilganida, rangli tugmachaga asosan oynaning yarim shaffof joylari aniqlanadi. LWA_ALPHA bayrog'i yoqilganda, shaffoflik qiymatini aniqlash uchun bAlpha parametri ishlatiladi.
6-qadam
Butun oynani yarim shaffof qilish uchun SetLayeredWindowAttributes-ni afzal bAlpha parametr qiymati, LWA_ALPHA bayrog'i bilan chaqiring, lekin LWA_COLORKEY bayrog'i yo'q. Topilgan oyna tutqichidan funktsiya uchun birinchi parametr sifatida foydalaning. Masalan, oynani yarim shaffof qilish uchun qo'ng'iroqdan foydalaning:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);