読者です 読者をやめる 読者になる 読者になる

DirectX で描画したアルファ値を使ってウィンドウを透過させる

DirectX Vista

川西さんにヒントをもらって色々実験してみたところ,DirectX で描画したアルファ値を使って DWM のウィンドウ・コンポジションを行うことができました.
Windows Vista ビルド 5384 日本語版にて,次のような順序で行っています.

  1. DwmEnableBlurBehindWindow のサンプルにあるように,fEnable を TRUE にして呼び出す.
  2. CreateSolidBrush(0x00000000) のように,アルファ値を 0 にしたブラシでクライアント領域を塗りつぶす
  3. DirectX にてアルファ値を持ったレンダーターゲットを Present する.

また,DwmEnableBlurBehindWindow API でリージョン付きブラーを有効にすると,リージョンでクリップされなかった部分はブラー無しでアルファブレンドされます.これを利用して,下のウィンドウをそのまま (またはアルファブレンドされた形で) 表示させることができます.というのが下.

実験につかったソースコードを置いておきますので興味がある方はどうぞ.(実験用ということでコードの整理やエラーチェックは手を抜いてます)
(ATL を使っているので) Visual C++ 2005 Professional Edition と,ビルド 5384 用の Windows SDK があればコンパイルできるかと思います.
http://www.dwahan.net/nyaruru/hatena/DWMTest.zip
ビルド 5456 が出たからそっちに移れと指示が出ているので,ビルド 5384 はこれにてさよならかな.