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

З вдосконаленням технологій графічного виводу удосконалювалося і 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) -
Переглядів: 3428

Увага, тільки СЬОГОДНІ!