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

З вдосконаленням технологій графічного виведення удосконалювалося і API операційних систем, надаючи програмістам все більше можливостей для розробки нестандартних елементів інтерфейсу. Так одним з нововведень операційної системи Windows 2000 були layered-вікна, частини яких могли бути напівпрозорими. Незабаром опис API для роботи з layered-вікнами стало доступно в MSDN. Однак на форумах програмістів питання про те, як зробити вікно напівпрозорим, задаються і понині.
Вам знадобиться
  • - компілятор;
  • - windows sdk або фреймворк для програмування під windows.
Інструкція
1
Отримайте дескриптор вікна, яке необхідно зробити напівпрозорим. Знайдіть або створіть вікно. Для його створення скористайтеся або API-функціями CreateWindow, CreateWindowEx, або методами-обгортками навколо цих функцій, що належать класам використовуваного фреймворка. Прототип функції CreateWindow виглядає наступним чином: HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam); Як видно, функція повертає дескриптор створеного вікна в якості результату виконання. У разі якщо використовується який-небудь клас-обгортка, використовуйте його методи на об'єкті, відповідному створеному вікну для отримання дескриптора.
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);