Desktop Window Manager(DWM) on WindowsForms

先日はDWMによるGlassの透過をWindows FormsとP/Invokeで制御するデモを紹介したが、今日は同様にWindows Forms + Desktop Window Manager(DWM)でウインドウのサムネイルを制御するデモを見つけたので紹介しよう。(といってもBart De Smet氏がデモを紹介したのは去年なので既出だろうか)


# .NET Blog : Programming the Windows Vista DWM in C# / Bart De Smet

コンボボックスにはEnumWindowsの結果により列挙されたウインドウ名が格納されており、選択されたウインドウに対応したサムネイルををdwmapiのDwmRegisterThumbnailにより登録する。
驚くべきはForm中心のImageコントロールに更新されたサムネイルイメージがきちんと再描画されることだ。このスクリーンショットは私の日記だが、ブラウザ側で画面をスクロールするとサムネイル上のイメージも同期して再描画される。なお、下端のスライダはサムネイルの透過率を制御できる。

このようにDWMの機能はP/Invoke経由であるということを除けば非常に簡単にアクセスすることができるが、今のところWPFを使う予定が無くWindows Formsで仕事をしている自分からすると非常にありがたい。