С подобряването на технологиите за графичен дисплей API на операционните системи също се подобри, предоставяйки на програмистите все повече и повече възможности за разработване на нестандартни елементи на интерфейса. Така че една от иновациите на операционната система Windows 2000 бяха слоестите прозорци, части от които можеха да бъдат полупрозрачни. Скоро в MSDN стана достъпно описание на API за работа със слоести прозорци. На форумите на програмистите обаче все още се задават въпроси как да направите прозореца полупрозрачен.
Необходимо
- - компилатор;
- Windows SDK или рамка за програмиране на Windows -.
Инструкции
Етап 1
Вземете дръжка към прозореца, който искате да направите полупрозрачен. Намерете или създайте прозорец. За да го създадете, използвайте или функциите на API CreateWindow, CreateWindowEx API, или методите на обвивката около тези функции, принадлежащи към класовете на използваната рамка. Прототипът за функцията CreateWindow изглежда така:
HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, отвътре, int nWidth, int nHeight,
HWND hWndParent, HMENU hMenu, НАСТОЯЩА инстанция, 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
Направете прозореца полупрозрачен. Използвайте SetLayeredWindowAttributes API или методите на класовете на обвивката. Прототипът на функцията 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);