Dengan peningkatan teknologi tampilan grafis, API sistem operasi juga meningkat, memberikan lebih banyak kesempatan kepada programmer untuk mengembangkan elemen antarmuka non-standar. Maka salah satu inovasi sistem operasi Windows 2000 adalah jendela berlapis, yang bagian-bagiannya bisa tembus pandang. Segera, deskripsi API untuk bekerja dengan jendela berlapis tersedia di MSDN. Namun, di forum programmer, pertanyaan tentang bagaimana membuat jendela semi-transparan masih ditanyakan.
Diperlukan
- - penyusun;
- - windows sdk atau kerangka kerja untuk pemrograman windows.
instruksi
Langkah 1
Dapatkan pegangan ke jendela yang ingin Anda buat semi-transparan. Temukan atau buat jendela. Untuk membuatnya, gunakan fungsi CreateWindow, CreateWindowEx API, atau metode pembungkus di sekitar fungsi-fungsi ini yang termasuk dalam kelas kerangka kerja yang digunakan. Prototipe untuk fungsi CreateWindow terlihat seperti ini:
Jendela Buat HWND (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nLebar, int nTinggi,
HWND hWndParent, HMENU hMenu, PETUNJUK hInstance, LPVOID lpParam);
Seperti yang Anda lihat, fungsi mengembalikan pegangan ke jendela yang dibuat sebagai hasil eksekusi. Jika ada kelas pembungkus yang digunakan, gunakan metodenya pada objek yang sesuai dengan jendela yang dibuat untuk mendapatkan pegangannya.
Langkah 2
Menemukan jendela dapat dilakukan dengan menggunakan panggilan API FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows, dan kombinasinya. Anda bisa mendapatkan pegangan ke jendela dalam area tertentu menggunakan fungsi WindowFromPoint dan ChildWindowFromPoint.
Langkah 3
Setel jendela ke gaya diperpanjang WS_EX_LAYERED. Gunakan API SetWindowLong atau metode objek pembungkus yang sesuai. Fungsi SetWindowLong sepenuhnya menggantikan informasi parameter jendela yang dapat dimodifikasi, jadi gunakan dalam kombinasi dengan fungsi GetWindowLong untuk mengambil nilai sebelumnya untuk kumpulan flag gaya. Misalnya, gaya dapat diubah seperti ini:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Di sini hWnd adalah pegangan jendela yang ditemukan sebagai hasil dari melakukan tindakan yang dijelaskan pada langkah sebelumnya.
Langkah 4
Jadikan jendela semi-transparan. Gunakan API SetLayeredWindowAttributes atau metode kelas pembungkus. Prototipe fungsi SetLayeredWindowAttributes terlihat seperti ini:
BOOL SetLayeredWindowAttributes (HWND hwnd, KUNCI COLORREF, BYTE bAlpha, DWORD dwFlags);
Langkah 5
Parameter hwnd ke fungsi harus berupa pegangan jendela yang valid yang diperoleh pada langkah pertama. Parameter crKey adalah kunci warna yang digunakan untuk mendefinisikan area semi-transparan. Parameter bAlpha menentukan nilai translucency. Dengan nilai parameter bAlpha sama dengan 0, area "semi-transparan" akan benar-benar transparan. Jika parameter bAlpha adalah 255, mereka akan benar-benar buram. Parameter dwFlags menentukan mode tampilan lebih lanjut dari isi jendela. Ketika flag LWA_COLORKEY disertakan dalam nilai dwFlags, area semitransparan dari jendela akan ditentukan berdasarkan tombol warna. Ketika flag LWA_ALPHA diaktifkan, parameter bAlpha akan digunakan untuk menentukan nilai translucency.
Langkah 6
Untuk membuat seluruh jendela semi-transparan, panggil SetLayeredWindowAttributes dengan nilai parameter bAlpha yang disukai, flag LWA_ALPHA, tetapi tanpa flag LWA_COLORKEY. Gunakan pegangan jendela yang ditemukan sebagai parameter pertama untuk fungsi tersebut. Misalnya, untuk membuat jendela setengah transparan, gunakan panggilan:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);