ポップアップメニューの項目をグレー表示にするには

解決


極初心者  2007-12-03 02:47:07  No: 67056

申し訳ありません。
もう一点、わからないことがあるので、質問します。
.NET2005 VISTA MFC です。

フローティングポップアップメニューの中の項目をグレー表示にしたいのですが、うまくいきません。
いろいろ調べて  EnableMenuItem  を使うらしい、というところまでは分ったのですが、あれこれコードを置き換えても、どうしてもグレーになってくれません。

下記コードのどこがいけないのでしょうか。
IDR_MENU1  は、リソースビューで作ったID、
ID_***  は、IDR_MENU1  の中の1項目のIDです。

  CMenu menu;
  VERIFY(menu.LoadMenu(IDR_MENU1));
  CMenu* popup = menu.GetSubMenu(0);
  ClientToScreen(&point);
  ASSERT(popup != NULL);
  menu.EnableMenuItem( ID_***, MF_GRAYED );
  popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd());
  PostMessage(WM_NULL, 0L, 0L); 

よろしくお願いいたします。


maru  2007-12-03 05:32:48  No: 67057

CMenu::EnableMenuItemの使用例を見るとサブメニューに対してEnableMenuItemをよんでいます。
> menu.EnableMenuItem( ID_***, MF_GRAYED );

popup->EnableMenuItem( ID_***, MF_GRAYED );
とするとどうなりますか?


極初心者  2007-12-03 13:33:02  No: 67058

maru さん、ありがとうございます。

popup->EnableMenuItem( ID_***, MF_GRAYED );

もやってみたのですが、リビルドは通るのですが、実行するとグレー表示にはなりません。


YuO  2007-12-03 19:51:39  No: 67059

第一引数の解釈方法を指定する,MF_BYPOSITIONまたはMF_BYCOMMANDが指定されていません。
今回の場合IDなので,MF_BYCOMMANDを指定する必要があります。
popup->EnableMenuItem(ID_***, MF_BYCOMMAND | MF_BYGRAYED);
のようにするとよいでしょう。
ref) http://msdn2.microsoft.com/ja-jp/library/h62wh3y1(VS.80).aspx


極初心者  2007-12-04 01:15:17  No: 67060

YuO さん、ありがとうございます。

popup->EnableMenuItem(ID_***, MF_BYCOMMAND | MF_BYGRAYED);

でも、だめでした。
何が悪いのか、分らないままです。

でも、二日じたばたして、結局  UPDATE_COMMAND_UI と pCmdUI->Enable(false)  で、淡色表示にできました。

たいへん申し訳ありませんでした。


極初心者  2007-12-04 01:16:18  No: 67061

[解決]にチェックを入れるのを忘れました。
重ねて申し訳ありません。


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

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






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