PR
Keyword Search
Calendar
New!
ホームズ探偵さんComments
Freepage List
DWM Thumbnailネタをもう一つ。
DWMのThumbnail転送機能はDwmRegisterThumbnail()という関数で転送元のウィンドウと転送先のウィンドウを結びつけますが、MSDNの記載でどちらもトップレベルウィンドウでなければならない旨の記載があります。(実際子ウィンドウを指定すると引数エラーを返します)
転送元は、ともかく転送先は任意だといいのいと思ってしまいます。
なんとなく、Thumnailを行うカスタムウィンドウ(子ウィンドウ)みたいなのを作れない印象を受けます。
しかしながら、あくまでも転送は通常のウィンドウマネージャが作成したウィンドウの上にDWMの描画が合成されることを考えると子ウィンドウから自分の表示している画面上の領域へ転送させることは問題ないということです。ただ指定がトップレベルのウィンドウと座標系がトップレベルのウィンドウのクライアント座標という点です。
実際作ったわけでないですが、こんな感じでできると思います。
1)CWnd等ウィンドウのベースを決めて継承クラスを作成
(継承元はCDialog,CStatic等この辺は必要性とお好みで。。)
2)ウィンドウが生成されたタイミングで自分所属するTOPレベルのウィンドウハンドルを取得
3)自身のウィンドウ位置をTOPレベルのウィンドウのクライアント座標に変換
4)転送先をTOPレベルウィンドウのハンドルでトップレベルウィンドウのクライアント座標で指定
5)ウィンドウの消滅イベントでunregistする。
6)ウィンドウのSHOW、HIDEで転送のON/OFFを切り替えたい場合はWM_SHOWWINDOW(mfcではOnShowWindow())でVisibleを切り替える
と、こんな感じですかね。
DWMの方から見ると、DWMマネージャはトップレベルのウィンドウしか認識していないのだと思います。(子ウィンドウ?それは通常のウインドウマネージャの管轄じゃみたいな。。)