スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/-- | スポンサー広告  TOP

今日のテクニック。 半透明ウィンド。 

今日は、レイヤード・ウィンドウについて説明します。
MSDNの解説↓
http://www.microsoft.com/japan/msdn/windows/windows2000/layerwin.aspx
要するにドット単位でのアルファ度合いは指定できない半透明なんですが、指定の透過色で透過できるので自由形状の表示は可能になります(エッジはアンチエリアスできないのでジャギが目立ちます。レイヤードを何枚か重ねてアンチエリアスするテクニックもありますが、それについてはリクエストがあれば)。
今回紹介するのは、もう一つの機能でウィンド全体の半透明度を指定する機能です。

私のソフトのXP風終了メニューで使っているテクニックなのですが、強制終了時にウィンドウを暗くしているのがレイヤード・ウィンドウです。
これは、従来のウィンドウの上にレイヤードの半透明で黒いウィンドウを重ね書きしているワケです。
以下の様に記述します。

[MFCでの記述]
//-------------------------------------------
// ウィンドウを半透明化。
//-------------------------------------------
// 拡張ウィンドウスタイルを取得します。
LONG Style = GetWindowLong(GWL_EXSTYLE);
// 拡張ウィンドウスタイルにWS_EX_LAYEREDを追加します。
SetWindowLong(GWL_EXSTYLE,(Style|WS_EX_LAYERED));

// 透明度を設定します。255で不透明で、160で約40%半透明です。
SetLayeredWindowAttributes(0,160,ULW_ALPHA);

//-------------------------------------------
// ウィンドウを実体化
//-------------------------------------------
// 拡張ウィンドウスタイルを取得します。
LONG Style = GetWindowLong(GWL_EXSTYLE);
// 拡張ウィンドウスタイルからWS_EX_LAYEREDを削除します。
SetWindowLong(GWL_EXSTYLE,(Style&~WS_EX_LAYERED));

間違いやリクエストがあれば、コメントお願いします。

2008/05/07 | プログラミングCOMMENT(0)TRACKBACK(0)  TOP

コメント

コメントの投稿



管理者にだけ表示を許可する

 | BLOG TOP | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。