申し訳ありません。
もう一点、わからないことがあるので、質問します。
.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);
よろしくお願いいたします。
CMenu::EnableMenuItemの使用例を見るとサブメニューに対してEnableMenuItemをよんでいます。
> menu.EnableMenuItem( ID_***, MF_GRAYED );
を
popup->EnableMenuItem( ID_***, MF_GRAYED );
とするとどうなりますか?
maru さん、ありがとうございます。
popup->EnableMenuItem( ID_***, MF_GRAYED );
もやってみたのですが、リビルドは通るのですが、実行するとグレー表示にはなりません。
第一引数の解釈方法を指定する,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
YuO さん、ありがとうございます。
popup->EnableMenuItem(ID_***, MF_BYCOMMAND | MF_BYGRAYED);
でも、だめでした。
何が悪いのか、分らないままです。
でも、二日じたばたして、結局 UPDATE_COMMAND_UI と pCmdUI->Enable(false) で、淡色表示にできました。
たいへん申し訳ありませんでした。
[解決]にチェックを入れるのを忘れました。
重ねて申し訳ありません。
ツイート | ![]() |