New Magnification API (2)

id:NyaRuRu:20061226:p1 続き.
少し調べてみたら,MSDN blog で今年 4 月ごろに,この「真の拡大機能」が紹介されている記事を発見しました.
Magnifier: An Interesting Discovery
やはり MIL レベルで DWM と連携している模様.



自分で API 叩いて遊んでみた感想としては,HWND によるフィルタ設定が色々便利そうでした.指定したウィンドウ,例えば PowerPoint 2007 のみを拡大するという設定にすれば,あたかもデスクトップにそのウィンドウのみしか存在しないかのように表示されます.マルチディスプレイを利用したプレゼンテーションなどでも,色々おもしろい応用ができそうですね*1
あとこれ DWM の開発チームが気付いてないことはないと思うのですが*2,Magnification API を使用すると,Direct3Dレンダリングされたアプリケーション (のうち,MIL を経由しないもの) の画面更新が拡大鏡にきちんと反映されません.GDI 描画ウィンドウと MIL 描画ウィンドウは OK で,Direct3D 描画ウィンドウがダメということからも,やはり DWM 絡みでしょうね.
例えばソリティアマインスイーパで試してみると,真っ白*3か,拡大鏡起動時の画面*4が表示され続けるかのどちらかになります.
現状,Direct3D を使用したウィンドウモードアプリケーションの拡大表示は,従来の拡大鏡の仕組みを使用するか,DWM サムネイル API を使うしかなさそうですねぇ.

*1:まあ Compiz や Beryl の programmability に比べればささいなものですが

*2:connect サイトのフィードバックを漁ろうと思ったら,検索ページから先にエラーで進めませんでした

*3:GDI リダイレクションされた WM_ERASEBKGND かな?

*4:大鏡起動時に一瞬 DWM がオフになって,この瞬間のクライアント画像がキャプチャできることがあります.ただし更新されない