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);
}
というコードがメニュー数存在します。
私のコーディングが悪いのか、はたまたそれが仕様なのかわかりかねます。
お分かりになる方がいらっしゃったら、原因・解決法をご教授いただければ幸いです。
>ポップアップメニューが表示される時に呼び出されるようにしたつもり
この「つもり」というのが結構コワかったりする。(笑)
確か ON_UPDATE_COMMAND_UI() マクロって、ダイアログベースのメニューには
対応してないから、WM_INITMENUPOPUP メッセージを処理して
そこで CCmdUI::DoUpdate() を呼び出してあげるんじゃなかったかな。
最近あまりMFCを使ってないので、記憶違いだったらゴメンなさい。
>というコードがメニュー数存在します。
世の中には ON_UPDATE_COMMAND_UI_RANGE() というマクロもございまして・・・。
g_hoge_modeはメニュー(a?)の連番でしょうか
それなら例えばOnUpdateMenuNのとき
pCmdUI->SetCheck((g_hoge_mode==N)?1:0);
とか。
(VC++6ですが)
回答いただいた皆様
ありがとうございます。
おかげ様で無事問題を解決することができました。
ダイアログベースでダメだとは全く予想ができませんでした…驚きです。
なぜこんな仕様にしたんでしょうねぇ…