Home > 技術 > ウィンドウ形状を変える3

ウィンドウ形状を変える3

●レイヤードウィンドウでウィンドウ形状を変える

【使う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

Home > 技術 > ウィンドウ形状を変える3

Search
Feeds
Authorized
奨学金支援制度
Meta

Return to page top