WinXP VisualStudio.NETC++を使っています
ポップアップメニューにチェックマークをつけたい項目があるのですが、
メニューバーのサブメニューの項目にチェックマークをつける場合と、
ポップアップメニューの項目にチェックマークをつける場合とで、
何か違う点があるのでしょうか。
メニューバーのサブメニューの項目につける場合
CheckMenuItemu(GetMenu(ウィンドウのハンドル),
メニューのID,
MF_CHECKED);
とすることでうまくいくのですが、
ポップアップメニューの場合、
CheckMenuItemu(LoadMenu(インスタンスハンドル, MAKEINTRESOURCE(サブメニューID)),
メニューID,
MF_CHECKED);
としてもうまくいきません。
どなたかご教授くださいお願いします。
ポップアップメニューは、ポップアップする必要があるたびに毎回 LoadMenu していませんか?
同じメニューリソースを複数回ロードすると、毎回違う HMENU が返ると思います。
要するに、毎回違う、新しいポップアップメニューを作っているのです。
提示されたコードでは、新しいメニューをロードし、それにチェックをつけ、破棄してしまいます。
ポップアップするときに、また新しいメニューを作り直すので、これにはチェックがついておりません。
対策としては、LoadMenu は一度だけ行い、それを使いまわすことになります。
シャノンさんのおっしゃる通り、毎回LoadMenuを使っていました。
LoadMenuをウィンドウ作成時に一度行い、グローバル変数に代入したところ
うまくチェックマークをつけることができました。
大変分かりやすいご指摘ありがとうございました。
とてもスムーズに解決しました。
ツイート | ![]() |