2012-04-05 8 views
1

私はアルファチャンネルを含む背景を設定したいWINDOWCLASSXを持っていますが、私は "RGB"マクロしか見ませんでした。 RGBAなし。WINDOWCLASSX hbrBackgroundアルファチャンネルを設定するにはどうすればよいですか? (C++)

hbrBackgroundにアルファを設定するにはどうすればよいですか?私のコードは以下の通りです:

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

答えて

2

ウィンドウクラスの背景ブラシを使用してアルファチャンネルを作成することはできません。代わりにWS_EX_LAYEREDスタイルをウィンドウに適用してから、SetLayeredWindowAttributes()またはUpdateLayeredWindow()のいずれかを使用してウィンドウのアルファチャンネルを設定する必要があります。詳細については、MSDNのドキュメントを読む:

Using Layered Windows

Layered Windows

+0

私はSetLayeredWindowAttributes()とUpdateLayeredWindow()の使い方を学んでいましたが、現在は半透明なウィンドウを持っています - 透明 - ish(エアロは明らかにクライアントエリア全体をカバーしています)が、内部は白です。バックグラウンドをどのような色に変更しても問題ありません。ここに私のコードはこれまでのところです:[link](http://pastebin.com/Wu12uPYD) – BananasGoMoo

+0

私はそれを理解しました。私は元のブラシをもう一度黒にしました。助けてくれてありがとう :) – BananasGoMoo

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変数)。

関連する問題