Як зробити вікно напівпрозорим

Як зробити вікно напівпрозорим

З удосконаленням технологій графічного висновку вдосконалювалося і API операційних систем, надаючи програмістам все більше можливостей для розробки нестандартних елементів інтерфейсу. Так одним з нововведень операційної системи Windows 2000 були layered-вікна, частини яких могли бути напівпрозорими. Незабаром опис API для роботи з layered-вікнами став доступним у MSDN. Однак на форумах програмістів питання про те, як зробити вікно напівпрозорим, задаються і понині.

Вам знадобиться

  • - компілятор;
  • - windows sdk або фреймворк для програмування під windows.

Інструкція

1. Отримайте дескриптор вікна, яке необхідно зробити напівпрозорим. Знайдіть або створіть вікно. Для його створення скористайтеся або API-функціями CreceWindow, CreceWindowEx, або методами-обгортками навколо цих функцій, що належать класам використовуваного фреймворку. Прототип функції CreceWindow виглядає наступним чином:HWND CreceWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int Якщо використовується якась клас-обгортка, використовуйте його методи на об 'єкті, що відповідає створеному вікну для отримання дескриптора.

2. Пошук вікна може бути зроблений за допомогою викликів API-функцій FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows і їх комбінацій. Можна отримати дескриптор вікна, що знаходиться в певній області, використовуючи функції WindowFromPoint і ChildWindowFromPoint.

3. Встановіть спеціальний стиль WS_EX_LAYERED. Використовуйте API-функцію SetWindowLong або відповідні методи об 'єктів-врапперів. Функція SetWindowLong повністю замінює інформацію про змінений параметр вікна, тому використовуйте її в комбінації з функцією GetWindowLong для отримання попереднього значення набору прапорів стилів. Наприклад, стиль можна змінити так:::SetWindowLong(hWnd, GWL_EXSTYLE, ::GetWindowLong (hWnd, GWL_EXSTYLE));Здесь hWnd - дескриптор вікна, знайдений внаслідок вчинення дій, описаних у попередньому кроці.

4. Зробіть вікно напівпрозорим. Використовуйте API-функцію SetLayeredWindowAttributes або методи класів-обертань. Прототип функції SetLayeredWindowAttributes виглядає так:BOOL SetLayeredWindowAttributes( HWND hwnd, COLORREF crKey, BYTE bAlpha, 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);