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

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


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


Оцініть, будь ласка статтю
Всього голосів: 167
Увага, тільки СЬОГОДНІ!