VC++ でデスクトップを更新するにはどうしたらいいのでしょうか。
デスクトップ上で「F5」キーを押したときと同じような効果が欲しいのです。
ヘルプを見て、それらしい API はあるのですが、英語だったりでよく分かりません。
どなたか教えてください。
>ヘルプを見て、それらしい API はあるのですが、英語だったりでよく分かりません。
その「それらしいAPI」を書くべきだと思いますけど・・・。
合っているかどうかは別にして。
質問をする際の必要な情報だと思いませんか?
そのAPIが何なのかは分かりませんが、こんな感じでとりあえずできます。
HWND hProgmanWnd = FindWindowEx(NULL, NULL, Progman, Program Manager);
HWND hDefViewWnd = FindWindowEx(hProgmanWnd, NULL, SHELLDLL_DefView, NULL);
HWND hSysListWnd = FindWindowEx(hDefViewWnd, NULL, SysListView32, NULL);
PostMessage(hSysListWnd, WM_KEYDOWN, (WPARAM)VK_F5, (LPARAM)0);
このような掲示板の存在価値を考えて、上の方法で問題解決したとしても「それらしいAPI」を是非書いてください。
CdS さん情報ありがとうございます。
確かに CdS さんがおっしゃるとおりです。
実はこのような質問をするのは初めてで、聞く態度がなっていませんでした。
ただ、自宅でネットにつながっているわけではなく、
つながるところへ移動しているうちにAPIの名前を忘れてしまったのです(汗)。
すいませんでした。
不親切な質問に答えて下さりありがとうございます。
家に帰ったら、早速、試してみます。
ちなみに私が思いこんでいたAPIとは違うようです。
それが、何であったかは今だ思い出せませんが…
CdSさん。ありがとうございます。
ビルドしたところ、希望通りの動作をしました。
しかし疑問があります。一度、デスクトップに
UpdateWindow() で ON_PAINT メッセージを送ったのですが、
うまくいきませんでした。「F5」を押したときとは、違うようです。
初心者なので、詳しいことは分かりませんが、「F5」キーを押したときには、
ON_PAINT 以外のメッセージが出されているようです。
この点について、どなたか情報を頂けないでしょうか?
答えではなくても、調べるための方法のようなもので構いません。
よろしくお願いします。
「メッセージが出されている」というより、WM_KEYDOWNでF5を受け取ったら何かをしてる(メッセージを出している)
んでしょう。
多分何をしているかはWindowsを作った人しか分からないんでしょうけど、Spy++で見てみればある程度分かると
思います。
F5を受け取ったら一度アイテムを全削除して、再構築しているようです。
再描画とは意味が全然違うことは分かりますよね?
CdS さん、一連の質問に答えて頂きありがとうございます。
もうちょっと、スマートにデスクトップの更新をしたかったので、
最後の質問をしたのですが、内部的なことのようですので、
半分仕方ないという意味でしょうか?
とりあえず、助言通り Spy++ で調べはしてみますが、
疑問は全て解けました。本当にありがとうございます。