【问题标题】:How do I set the WINDOWCLASSX hbrBackground alpha channel? (C++)如何设置 WINDOWCLASSX hbrBackground alpha 通道? (C++)
【发布时间】:2012-04-18 19:50:02
【问题描述】:

所以,我有一个想要设置背景的 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。

-感谢您的帮助。

【问题讨论】:

标签: c++ winapi user-interface alpha winmain


【解决方案1】:

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

Using Layered Windows

Layered Windows

【讨论】:

  • 所以我一直在努力学习如何使用 SetLayeredWindowAttributes() 和 UpdateLayeredWindow() 现在我有一个半透明的窗口(aero 显然覆盖了整个客户区)但是里面是白色的,不管我把背景改成什么颜色。到目前为止,这是我的代码:link
  • 没关系,我刚刚想通了,我把原来的画笔重新变黑了,现在可以了。感谢您的帮助:)
【解决方案2】:

这对我来说很有效:

// 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 变量)。

【讨论】:

    猜你喜欢
    • 2019-01-13
    • 2021-11-05
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2013-05-30
    • 1970-01-01
    相关资源
    最近更新 更多