ON_UPDATE_COMMAND_UI&WM_IDLEUPDATECMDUIについて

[戻る]
mkobaya8 2002/07/16(火) 09:41:28
環境 VC++6.0 MFC
Visual Studioサンプルプログラム「DLGCBR32」を参考に、モードレスダイアログボックスへ
スタータスバー「NUM」とツールバー「貼り付け」を追加するアプリケーションを作成していま
す。
「NUM」「貼り付け」は、その時の状態に応じて表示/非表示、可視/不可視表示する為に
ON_UPDATE_COMMAND_UI&WM_IDLEUPDATECMDUIメッセージをオーバーライドしていますが、
モードレスダイアログボックスをCREATEで単独起動した場合は、上記メッセージが飛んでくる
のですが、タスクトレイ常駐型にしてモードレスダイアログボックスを起動した場合
(CMainFrame→CREATE)、ON_UPDATE_COMMAND_UI&WM_IDLEUPDATECMDUIメッセージが飛んで
来ません。
「DLGCBR32」ヘルプをよくよく読んでみると、CWnd::SendMessageToDescendants辺りを使っ
て制御するような気もするのですが、この辺がよく分かりません。
分かる方がいらっしゃいましたら教えて下さいますようお願いします。

PATIO 2002/07/16(火) 16:18:35
確か、ON_UPDATE_COMMAND_UIハンドラやWM_IDLEUPDATECMDUIはアプリケーションの
メインウインドウに送られると記憶しています。
単独で開いていた時は、モードレスがメインウインドウだったために受け取れていたのでしょ
う。
Doc-Viewアーキテクチャを使っている場合は、MainFrameからViewにディスパッチされていた
と
思います。
モードレスウインドウはメインウインドウではないので果たしてMainFrameにモードレスダイア
ログのON_UPDATE_COMMAND_UIやWM_IDLEUPDATECMDUIがくるかどうかも怪しいと思います。

試しにMainFrameで捕まえられるかどうかやってみてはどうでしょう。
捕まえられれば、MainFrameからモードレスウインドウにPostMessageしてやれば
何とかなると思いますが、捕まえられない場合は他の手を考えないといけないでしょう。

mkobaya8 2002/07/17(水) 09:50:00
PATIOさん返信有り難う御座います。
Doc-Viewアーキテクチャは使っていません。CMainFrameがメインウインドウで、そこからモー
ドレスダイアログをCreateで起動しています。

タスクトレイ常駐状態でCMainFrameにモードレスダイアログのON_UPDATE_COMMAND_UI、
WM_IDLEUPDATECMDUIメッセージは来ていません。
もしこの方法で出来ない場合は、別にどのような方法があるのでしょうか?

繰り返しになりますがやりたい事は、スタータスバー「NUM」とツールバー「貼り付け」の状態
を適時更新したいだけです。その時の条件としてモードレスダイアログが単独起動している場合
とタスクトレイ常駐型でCMainFrameからモードレスダイアログが起動される場合の2パターン
があります。

申し訳ありませんが宜しくお願いします。

PATIO 2002/07/19(金) 10:02:44
ツールバーは、ON_UPDATE_COMMAND_UIに頼るのではなくて自前でやるしか
無い気がします。ツールバーの状態遷移は基本的にユーザーのオペレーションに
よると思いますのでそのタイミングで切り替えていくしかないかと。

WM_IDLEUPDATECMDUIの方は、IDLE状態の時を捕まえて自前で処理かな。
どちらにせよ、そのメッセージに頼れない以上、他の方法で代替するしかないと思いますよ。

古いスレッドには追加発言できません。