MD3 にて

昨日,ノンジャンルテクニカルセッション *1 MD3 (と前日のパーティ) にて川西さんにお会いする機会があったので,DWM の話やら WPF の話やらお聞きしてきました.色々新しいネタを頂いたので,まあぼちぼち消化していこうかと.



会話の中で川西さんが「(DWM や WPF の) 開発者 blog は,最新情報が頻繁に公開されるのは良いが,情報が散らばりすぎてカオスになっている」といったことを言われていて,確かにそうだなぁと.
今まで『MSDN Magazine』や『Advanced Windows (asin:4756138055)』,『インサイド Microsoft Windows (asin:4891004738)』のようなコア開発者向けネタバラし本級の内容が,ここ最近 MSDN blog のあちこちで見られるようになっています.例の @IT の記事執筆時にも,DWM や WPF について調べていくと一次情報が開発者の MSDN blog ということがずいぶんありました.ベータ製品のオフィシャルドキュメントを書かされるよりも,自分のところの blog で書く方が楽しいというのは分からなくもありませんが,内部実装の詳細や,パフォーマンスチューニングについての指針といった比較的おいしいジャンルを blog で補完されると追いかける方にとってはかなり大変です.
また,英語圏の住人にとっては単なる情報源のカオス化ですむ問題も,日本語圏にとってオフィシャルドキュメントの空洞化は情報輸入チャネルの消失を意味するわけで,じわじわと消耗戦をやっている感じです.
とはいえ英語圏に限れば公開されている情報自体は以前よりも確実に増えていえるわけで,英語圏のコミュニティの技術レベルは徐々に向上しているんじゃないでしょうかね.ベータ製品の場合は特に.そして日本はそれに反比例と.日本でも「Vista 使ってみました」系の,使用記や感想記は多いんですけどねぇ……



そう言えば川西さんも blog を始められたとのことで,オイシイ情報を色々期待してみたり.
http://blogs.msdn.com/hiroyuk/:image:large
http://blogs.msdn.com/hiroyuk/

*1:と書いてある.http://www.exconn.net/Blogs/team03/archive/2006/06/28/14230.aspx

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

川西さんにヒントをもらって色々実験してみたところ,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 はこれにてさよならかな.