OrangeMaker

2009/10/22(木)06:46

DWM Thumbnailの落とし穴

DWMのThumbnail機能は簡単でとても便利ですが、ひとつ穴ぼこがあります。自分でも忘れそうなので、メモ替わりに記載しておきます。DWMのThumbnailを使うには、DWMRegisterThumbnail()で転送元のウィンドウと転送先の2つのウインドウを結びつけたあと、DWMUpdateThumbnailProperties()でパラメータの設定を行います。このとき、転送先の矩形と転送元の矩形を設定できます。転送先はクライアント座標なのであまり間違うことはないですが、問題は転送元の矩形座標です。ここを省略すればウィンドウ全体となるので問題はあまりないのですが。。この転送元の矩形座標は、ウィンドウ全体を対象とした場合はウィンドウ原点を(0,0)とする座標系です。(つまりリージョンの指定と同じ)、転送をクライアント領域だけにした場合はクライアント座標になるようです。問題となるのは、DWMでフレーム拡張している場合はウィンドウ原点は表示しているウィンドウの少し内側になります。ということは、フレーム拡張しているウィンドウの場合、転送元の矩形の指定は TOP=-TOP方向のフレーム拡張分 LEFT=-LEFT方法のフレーム拡張分 RIGHT=LEFT + DwmGetWindowAttribute(DWMWA_EXTENDED_FRAME_BOUNDS・・・)で取得したウィンドウ幅 BOTTOM=TOP+DwmGetWindowAttribute(DWMWA_EXTENDED_FRAME_BOUNDS・・・)で取得したウィンドウ高さのような指定をしなければならないようです。TOP,LEFTにマイナスを指定可能なことにしばらく気がつきませんでした。。(汗。。)このようなことが発生するのは、サイズ変更枠を持たないウィンドウ(つまり固定サイズのウィンドウ)です。   

続きを読む

総合記事ランキング

もっと見る