如何设置WINDOWCLASSX hbrBackground alpha通道?(C++)

How do I set the WINDOWCLASSX hbrBackground alpha channel? (C++)

本文关键字:alpha 通道 C++ hbrBackground WINDOWCLASSX 设置 何设置      更新时间:2023-10-16

所以,我有一个WINDOWCLASSX,我想将背景设置为,包括alpha通道,但我只看到了一个"RGB"宏;无RGBA。

那么,如何在hbrBackground上设置alpha?这是我的代码:

    WNDCLASSEX wincl;  

wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;      
wincl.style = CS_DBLCLKS;               
wincl.cbSize = sizeof (WNDCLASSEX);
wincl.hIcon = LoadIcon (GetModuleHandle(0), MAKEINTRESOURCE(IDI_MYAPP));
wincl.hIconSm = LoadIcon (GetModuleHandle(0), MAKEINTRESOURCE(IDI_MYAPP));
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = MAKEINTRESOURCE(IDR_MAINFRAME);               
wincl.cbClsExtra = 0;                     
wincl.cbWndExtra = 0;                     
wincl.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);

在最后一行,我希望能够设置alpha。

-谢谢你的帮助。

不能在窗口类上使用背景笔刷创建alpha通道。您必须将WS_EX_LAYERED样式应用于窗口,然后使用SetLayeredWindowAttributes()UpdateLayeredWindow()来设置窗口的alpha通道。阅读MSDN文档了解更多详细信息:

使用分层Windows

分层Windows

这对我来说很成功:

// Set WS_EX_LAYERED on this window 
SetWindowLong(g_mainWnd, GWL_EXSTYLE, GetWindowLong(g_mainWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
// Make this window 70% alpha
SetLayeredWindowAttributes(g_mainWnd, 0, (255 * 70) / 100, LWA_ALPHA);

g_mainWnd变量是对相应窗口的引用(在我的例子中,是HWND变量)。