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

解決


POP  2005-09-18 10:39:38  No: 59095

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

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

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

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

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

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

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


シャノン  2005-09-18 14:54:52  No: 59096

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

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

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


POP  2005-09-19 10:58:15  No: 59097

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

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加