Visual Studio 2003のMFC(SDI)を使用している者です。
C**View::OnCreateにおいて、のちに使うメニューバーのサブメニューをいったんグレー
アウトさせるために
CMenu * menu = GetMenu();
CMenu * sub = menu->GetSubMenu(1);
EnableMenuItem(sub->GetSafeHmenu(), ID_*****, MF_GRAYED| MF_BYCOMMAND );
と書いて実行したところ、GetSubMenuを実行した時点で
Debug Assertion Failed!
が出ました。
どうすればグレーアウトできますか?
一般にMFCの場合、メニューの内容を編集するには、
対象メニューを持つCWndの派生クラスで、OnInitMenu()を
オーバーライドして、その中で行います。
また、一般的にはSDIのViewはメニューを持ちません。
通常、メニューを持つのはメインのフレームになります。
>CMenu * sub = menu->GetSubMenu(1);
でエラーになった…ということですよね?
とりあえず…menuは有効な値になっているんでしょうか?
http://msdn.microsoft.com/ja-jp/library/7xkd69hf%28v=vs.71%29.aspx
ビューのOnCreate()でウィンドウのメニューを取得できるのか?
については、MFC詳しくないので不明です。
# 誰かがその辺回答してくれる…でしょう。たぶん。
うーーん、
ふつうメニューは、CFrameWndだと思いますね。
多くのご助言、ありがとうございます。
いろいろ試したところ、サブメニューをグレーアウトさせる方法として
メニューのイベントハンドラ―を追加する際、メッセージの種類を、
UPDATE_COMMAND_UIとし、追加したOnUpdate*****(CCmdUI *pCmdUI)の中で
pCmdUI->Enable(FALSE);
とする、というものを発見しました。