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

[Visual C++ Q & A 掲示板] [過去ログの一覧]


極初心者 2007/12/02(日) 17:47:07
申し訳ありません。
もう一点、わからないことがあるので、質問します。
.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/02(日) 20:32:48
CMenu::EnableMenuItemの使用例を見るとサブメニューに対してEnableMenuItemをよんでいます。
> menu.EnableMenuItem( ID_***, MF_GRAYED );

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

極初心者 2007/12/03(月) 04:33:02
maru さん、ありがとうございます。

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

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

YuO [E-Mail] 2007/12/03(月) 10:51:39
第一引数の解釈方法を指定する,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/03(月) 16:15:17
YuO さん、ありがとうございます。

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

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

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

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

極初心者 2007/12/03(月) 16:16:18 <初心者>
[[解決]]

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

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library