- 2009-07-17 (金) 17:45
- 技術
●レイヤードウィンドウでウィンドウ形状を変える
【使うAPI】
SetWindowLong, SetLayeredWindowAttributes
【要約】
拡張ウィンドウスタイルでレイヤードウィンドウ指定 → SetLayeredWindowAttributesで調整.
ウィンドウをレイヤードウィンドウにする(?)には,SetWindowLongで拡張ウィンドウスタイルにWS_EX_LAYEREDを設定します.
SetWindowLong( hWnd, GWL_EXSTYLE, GetWindowLong( hWnd, GWL_EXSTYLE ) | WS_EX_LAYERED );
(ウィンドウ生成時にCreateWindowExを使って指定してもOK.)
で,SetLayeredWindowAttributes関数で透過色(今回は白なのでRGB(255,255,255))を設定するだけです.この関数はウィンドウの透明度も設定できるので,猫を半透明にすることも可能です.
あとは猫の画像を描画すれば,勝手に指定した色の部分が透過されます.
(この辺はVisualStudioのバージョンとかで変わるのかもしれませんが)ビルドしようとすると,レイヤードウィンドウ関係の定数が「定義されていません」と言われます.
なにやらwindows.hあたりで#ifdefで定義するかしないかが切り替えられているようです.
windows.hをインクルードする前に
#define _WIN32_WINNT 0x0500
とかすると(本当にこれでいいのだろうか?)レイヤードウィンドウ関係の定数を定義させることができます.
レイヤードウィンドウを使うと,ウィンドウを猫型にするための処理はたったこれだけなので,
途中で猫の透明度を変えたりとかしないのであれば,ウィンドウプロシージャのWM_CREATEメッセージに対する処理あたりで,SetWindowLongとSetLayerdWindowAttributesを一度コールするだけでOK.
(4)ウィンドウ形状を変える4
- Newer: ウィンドウの形状を変える4
- Older: ウィンドウ形状を変える2