2012-04-05 107 views
1

所以,我有一个WINDOWCLASSX,我想设置背景,包括alpha通道,但我只看到一个“RGB”宏;没有RGBA。如何设置WINDOWCLASSX hbrBackground alpha通道? (C++)

那么如何在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); 

在最后一行,我希望能够设置阿尔法。

- 感谢您的帮助。

+0

您不用透明画笔创建透明窗口。 http://stackoverflow.com/questions/9413154/custom-window-frame-smooth-border/ – arx 2012-04-05 03:53:36

回答

2

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

Using Layered Windows

Layered Windows

+0

所以我一直在学习如何使用SetLayeredWindowAttributes()和UpdateLayeredWindow(),现在我有一个窗口是半-transparent-ish(航空显然覆盖整个客户区域),但内部是白色的,无论我改变背景的颜色。这里是我的代码到目前为止:[链接](http://pastebin.com/Wu12uPYD) – BananasGoMoo 2012-04-05 06:45:32

+0

没关系,我只是想通了,我再次使原来的刷子黑色,它现在的作品。谢谢您的帮助 :) – BananasGoMoo 2012-04-05 06:59:19

0

这只是摸索出适合我:

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