こんにちは。早速ですが質問です。
作りたい機能が実現できそうか相談に乗ってください。
実現したい機能は
・そのとき起動中すべてのウインドウのサムネイル?を一覧表示したいのです。
ここで言う「起動中のウインドウ」とはAlt+tabで認識されるものです。
そのために考えた手順として、
1.起動中のウインドウハンドルをとる。
2.ハンドルからGetWindowDCでDCを取得
3.メモリDCをはかせる
4.最描写させる
5.サムネイル(画面イメージ)Get!!
としようとしました。
ここで質問ですが、
1.外部から強制再描写できるのか
2.もともと隠れているウインドウ(タスクバーに格納 含)の場合メモリDCにウィンドウ
は描写されるのか?
3.そもそもウインドウハンドルから上の案でサムネイルが取得できるのか?
4.上の案に足りない操作や、考慮していない問題点
をよろしくお願いします。
デスクトップ画面から切り抜くことも考えたのですが
すべてのウインドウをいちいち表面に持ってくるのもなんだか変だと思い上記の案でとり
あえずチャレンジ中です。
また、Windowsの画面描写はどのように行われているか
参考時なる資料などもありましたらあわせて教授願えますよう
よろしくお願いします。
環境: winXP VS2005 MFC
WM_PRINTっていうのがある。
俺、
昔ちょっとダイアログで自分のウィンドウにやってみたが
ずれたものが得られた経験がある。
それっきりつかったこと無い。
別アプリでも成功するのか知らない。
最小化ウィンドウでどうなるか知らない。
「WM_PRINT」でぐぐると結構でてきますね。
>超初心者さん、ITOさん
ありがとうございます。
WM_PRINTですね。
調べてみます。
DIOさん。おはようございます。
>実現したい機能は・そのとき起動中すべてのウインドウのサムネイル?・・・・
サムネイル==ウィンドウの画面という解釈でいいのでしょうか??
起動中のすべてのウィンドウのキャプチャーはしたことがあります。それなりに苦労
しましたよ。わかる範囲で回答させていただきます。
>2.もともと隠れているウインドウ(タスクバーに格納 含)の場合メモリDCにウィンド
>ウは描写されるのか?
描写されるのか?とは正常にメモリDCに展開できるのか??ってことでしょうか?た
ぶんこれらのDCは取得しても、DIOさんが期待したDCは取得できていないはず
>4.上の案に足りない操作や、考慮していない問題点
i) 例えば AのウィンドウとBのウィンドウが重なっている場合、キャプチャーしたい
ウィンドウを最前面にもってこないといけない。つまりキャプチャーしていくと最前面
ウィンドウがころころ切り替わる感じになると思います。
ii) i)に関連することで 最小化やタスクバーに格納されている場合は当然 元のサイズ
に戻す必要がある。
iii) ウィンドウもしくはその一部が画面からはみ出している場合は そのはみ出し部
分のDCも取得できないのでキャプチャーする場所の考慮が必要。私の場合は無難にキャ
プチャーしたいウィンドウを(0,0)に移動させました。
iv) 起動中のウィンドウのハンドルをどのように取得するのですか??また起動中かど
うかをどのように判別するように考えられているのでしょうか??
v) MDI形式のウィンドウの子ウィンドウも取得するのか?どうか?
私の思いつく範囲はこれぐらいですかね??また間違いとかあれば指摘してください。
XP以降でしか動作しなくてもよいのであれば、PrintWindowというAPIがあります。
これなら、隠れているウィンドウも取得できるっぽい。
http://msdn2.microsoft.com/en-us/library/ms535695.aspx
http://www.microsoft.com/japan/msdn/windows/windowsxp/xpvisualstyles.aspx
>ドルドルさん
ありがとうございます。
ひとつづつ、確認しましたが、おっしゃるとおりでした。
どの道、位置合わせして、再表面に持ってくるのならば、
デスクトップ切り取ったほうが軽いのでしょうか?
>シャノンさん
PrintWindowすごいですね。
サブウインドウまで取ってくれてました。
ただ、タスクバーのなかにあるものはやはり取れず、
一工夫は必要のようです。
相談に乗っていただきありがとうございました。