Прозрачные окна


Привожу пример, как можно придать прозрачность разнообразным окнам. Для этого нам послужит функция
SetLayeredWindowAttributes:

BOOL SetLayeredWindowAttributes(
HWND hwnd,
//хэндл окна
COLORREF crKey, //цвет который будет прозрачен
BYTE bAlpha, //степень прозрачности(0-255)
DWORD dwFlags //флаг, если LWA_COLORKEY – отображаться не будут те цвета которые указаны во втором параметре, если LWA_ALPHA – тогда прозрачность
);

Для работы этой функции необходимо, чтобы у окна были дополнительное свойство WS_EX_LAYERED,
оно устанавливается с помощью функции SetWindowLong.

#include <windows.h>
BOOL (WINAPI *SetNotePadLayer)(HWND,COLORREF,BYTE,DWORD);
int main()
{
HINSTANCE hMod;
HWND hwnd;
ShellExecute(NULL,"open","notepad.exe",NULL,NULL,SW_SHOWNORMAL);
hMod = LoadLibrary("user32.dll");
if(hMod)
{
SetNotePadLayer =(
int(__stdcall*)(HWND,COLORREF,BYTE,DWORD))GetProcAddress(hMod,"SetLayeredWindowAttributes");
if(SetNotePadLayer)
{
do
{ hwnd = FindWindow("Notepad",NULL);
SetWindowText(hwnd,"www.prog.h14.ru");
}
while(hwnd==NULL);
if(SetWindowLong(hwnd,GWL_EXSTYLE,0x80000))
{
if(!SetNotePadLayer(hwnd,0,150,0x02))
{MessageBox(NULL,"Error SetNotePadLayer","Error",MB_OK|MB_ICONSTOP);}
}
else{MessageBox(NULL,"Error SetWindowLong","Error",MB_OK|MB_ICONSTOP);}
}
else{MessageBox(NULL,"Error GetProcAddress","Error",MB_OK|MB_ICONSTOP);}
}
else{MessageBox(NULL,"Error load user32.dll","Error",MB_OK|MB_ICONSTOP);}
if(!FreeLibrary(hMod)){MessageBox(NULL,"Error FreeLibrary","Error",MB_OK|MB_ICONSTOP);}
return 0;
}
 
« Предыдущая статья   Следующая статья »