ポップアップメニューの項目にチェックマークをつけるには?

解決


POP  2005-09-18 01:39:38  No: 59095  IP: 192.*.*.*

WinXP VisualStudio.NETC++を使っています

ポップアップメニューにチェックマークをつけたい項目があるのですが、
メニューバーのサブメニューの項目にチェックマークをつける場合と、
ポップアップメニューの項目にチェックマークをつける場合とで、
何か違う点があるのでしょうか。

メニューバーのサブメニューの項目につける場合

CheckMenuItemu(GetMenu(ウィンドウのハンドル),
               メニューのID,
               MF_CHECKED);

とすることでうまくいくのですが、
ポップアップメニューの場合、

CheckMenuItemu(LoadMenu(インスタンスハンドル, MAKEINTRESOURCE(サブメニューID)),
               メニューID,
               MF_CHECKED);

としてもうまくいきません。
どなたかご教授くださいお願いします。

編集 削除
シャノン  2005-09-18 05:54:52  No: 59096  IP: 192.*.*.*

ポップアップメニューは、ポップアップする必要があるたびに毎回 LoadMenu していませんか?
同じメニューリソースを複数回ロードすると、毎回違う HMENU が返ると思います。
要するに、毎回違う、新しいポップアップメニューを作っているのです。

提示されたコードでは、新しいメニューをロードし、それにチェックをつけ、破棄してしまいます。
ポップアップするときに、また新しいメニューを作り直すので、これにはチェックがついておりません。

対策としては、LoadMenu は一度だけ行い、それを使いまわすことになります。

編集 削除
POP  2005-09-19 01:58:15  No: 59097  IP: 192.*.*.*

シャノンさんのおっしゃる通り、毎回LoadMenuを使っていました。

LoadMenuをウィンドウ作成時に一度行い、グローバル変数に代入したところ
うまくチェックマークをつけることができました。

大変分かりやすいご指摘ありがとうございました。
とてもスムーズに解決しました。

編集 削除