UpdatecommandUIが呼ばれるタイミング – プログラミング – Home

通知
すべてクリア

[解決済] UpdatecommandUIが呼ばれるタイミング


せんず
 せんず
(@せんず)
ゲスト
結合: 15年前
投稿: 2
Topic starter  

Windows Vista/VC++ 2005/MFC/ダイアログベースで開発しています。
ダイアログにポップアップメニューにチェック付きのメニューを複数項目つくって
UpdatecommandUIで変数aに応じてどれか一つにチェックマークをつけたいと思っていま
す。

しかし
1.変数aにかかわらずチェック付きメニューの全ての項目にチェックが入ってしまう。
  (どれかひとつにチェックが入っている状態を望んでいる)
2.デバッグモードで確かめるとポップアップメニューを表示した時ではなく
  当該メニュー項目をクリックしたときにUpdatecommandUIが呼び出されている
  (ポップアップメニューが表示される時に呼び出されるようにしたつもり)

具体的なコードは
void CHogeDlg::OnMenu1()
{
// TODO: ここにコマンド ハンドラ コードを追加します。
g_hoge.mode = 1;
}

void CHogeDlg::OnUpdateMenu1(CCmdUI *pCmdUI)
{
// TODO: ここにコマンド更新 UI ハンドラ コードを追加します。
pCmdUI->SetCheck(g_hoge.mode==1);
}
というコードがメニュー数存在します。
私のコーディングが悪いのか、はたまたそれが仕様なのかわかりかねます。
お分かりになる方がいらっしゃったら、原因・解決法をご教授いただければ幸いです。


引用未解決
トピックタグ
FlatWest
 FlatWest
(@FlatWest)
ゲスト
結合: 15年前
投稿: 17
 

>ポップアップメニューが表示される時に呼び出されるようにしたつもり

この「つもり」というのが結構コワかったりする。(笑)

確か ON_UPDATE_COMMAND_UI() マクロって、ダイアログベースのメニューには
対応してないから、WM_INITMENUPOPUP メッセージを処理して
そこで CCmdUI::DoUpdate() を呼び出してあげるんじゃなかったかな。

最近あまりMFCを使ってないので、記憶違いだったらゴメンなさい。

>というコードがメニュー数存在します。

世の中には ON_UPDATE_COMMAND_UI_RANGE() というマクロもございまして・・・。


返信引用
Ismaell.
 Ismaell.
(@Ismaell.)
ゲスト
結合: 15年前
投稿: 7
 

g_hoge_modeはメニュー(a?)の連番でしょうか

それなら例えばOnUpdateMenuNのとき
pCmdUI->SetCheck((g_hoge_mode==N)?1:0);
とか。
(VC++6ですが)


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

FlatWestさんの話通りで良いと思います。

詳しくは以下を参照してください。
http://support.microsoft.com/kb/242577/ja


返信引用
せんず
 せんず
(@せんず)
ゲスト
結合: 15年前
投稿: 2
Topic starter  

回答いただいた皆様
ありがとうございます。
おかげ様で無事問題を解決することができました。
ダイアログベースでダメだとは全く予想ができませんでした…驚きです。
なぜこんな仕様にしたんでしょうねぇ…


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました