Перейти к содержимому

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

Прозрачные окна на C++. Привожу пример, как можно придать прозрачность разнообразным окнам. Для этого нам послужит функция 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;
}

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

Метки: