Dengan peningkatan teknologi paparan grafik, API sistem operasi juga bertambah baik, memberikan lebih banyak peluang kepada pengaturcara untuk mengembangkan elemen antara muka yang tidak standard. Jadi salah satu inovasi sistem operasi Windows 2000 adalah tingkap berlapis, yang sebahagiannya boleh tembus cahaya. Tidak lama kemudian, penerangan tentang API untuk bekerja dengan tingkap berlapis tersedia di MSDN. Namun, di forum pengaturcara, pertanyaan mengenai cara membuat tetingkap separa telus masih diajukan.
Perlu
- - penyusun;
- - windows sdk atau rangka untuk pengaturcaraan windows.
Arahan
Langkah 1
Dapatkan pemegang ke tetingkap yang ingin anda buat separa telus. Cari atau buat tetingkap. Untuk membuatnya, gunakan fungsi CreateWindow, CreateWindowEx API, atau kaedah wrapper di sekitar fungsi ini yang termasuk dalam kelas kerangka yang digunakan. Prototaip untuk fungsi CreateWindow kelihatan seperti ini:
HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nTinggi, HWND hWndParent,
HMENU hMenu, KEPERLUAN hInstance, LPVOID lpParam);
Seperti yang anda lihat, fungsi mengembalikan pegangan ke tetingkap yang dibuat sebagai hasil pelaksanaan. Sekiranya ada kelas pembungkus digunakan, gunakan kaedahnya pada objek yang sesuai dengan tetingkap yang dibuat untuk mendapatkan pegangan.
Langkah 2
Mencari tetingkap boleh dilakukan dengan menggunakan panggilan API FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows, dan kombinasinya. Anda boleh mendapatkan tetingkap ke jendela dalam kawasan tertentu menggunakan fungsi WindowFromPoint dan ChildWindowFromPoint.
Langkah 3
Tetapkan tetingkap ke gaya lanjutan WS_EX_LAYERED. Gunakan SetWindowLong API atau kaedah yang sesuai untuk objek pembungkus. Fungsi SetWindowLong sepenuhnya menggantikan maklumat parameter tetingkap yang dapat diubah, jadi gunakannya dalam kombinasi dengan fungsi GetWindowLong untuk mendapatkan nilai sebelumnya untuk set bendera gaya. Contohnya, gaya boleh diubah seperti ini:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Di sini hWnd adalah pemegang tingkap yang dijumpai sebagai hasil daripada tindakan yang dijelaskan pada langkah sebelumnya.
Langkah 4
Jadikan tingkap separa telus. Gunakan API SetLayeredWindowAttributes atau kaedah kelas pembungkus. Prototaip fungsi SetLayeredWindowAttributes kelihatan seperti ini:
Set BOOL SetLayeredWindowAttribut (HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
Langkah 5
Parameter hwnd ke fungsi mestilah pemegang tetingkap yang sah yang diperoleh pada langkah pertama. Parameter crKey adalah kunci warna yang digunakan untuk menentukan kawasan separa telus. Parameter bAlpha menentukan nilai tembus. Dengan nilai parameter bAlpha sama dengan 0, kawasan "separa telus" akan menjadi telus sepenuhnya. Sekiranya parameter bAlpha adalah 255, mereka akan menjadi legap sepenuhnya. Parameter dwFlags menentukan mod paparan kandungan tetingkap selanjutnya. Apabila bendera LWA_COLORKEY disertakan dalam nilai dwFlags, kawasan separa telus tetingkap akan ditentukan berdasarkan kunci warna. Apabila bendera LWA_ALPHA diaktifkan, parameter bAlpha akan digunakan untuk menentukan nilai tembus.
Langkah 6
Untuk menjadikan keseluruhan tetingkap separa telus, panggil SetLayeredWindowAttributes dengan nilai parameter bAlpha pilihan, bendera LWA_ALPHA, tetapi tidak ada bendera LWA_COLORKEY. Gunakan pemegang tetingkap yang dijumpai sebagai parameter pertama fungsi. Contohnya, untuk membuat tetingkap separuh telus, gunakan panggilan:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);