GetSubMenuでエラー – プログラミング – Home

通知
すべてクリア

[解決済] GetSubMenuでエラー


エンドレス
 エンドレス
(@エンドレス)
ゲスト
結合: 11年前
投稿: 2
Topic starter  

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!

が出ました。
どうすればグレーアウトできますか?


引用未解決
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

一般にMFCの場合、メニューの内容を編集するには、
対象メニューを持つCWndの派生クラスで、OnInitMenu()を
オーバーライドして、その中で行います。
また、一般的にはSDIのViewはメニューを持ちません。
通常、メニューを持つのはメインのフレームになります。


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

>CMenu * sub = menu->GetSubMenu(1);

でエラーになった…ということですよね?
とりあえず…menuは有効な値になっているんでしょうか?

http://msdn.microsoft.com/ja-jp/library/7xkd69hf%28v=vs.71%29.aspx
ビューのOnCreate()でウィンドウのメニューを取得できるのか?
については、MFC詳しくないので不明です。
# 誰かがその辺回答してくれる…でしょう。たぶん。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

うーーん、
ふつうメニューは、CFrameWndだと思いますね。


返信引用
エンドレス
 エンドレス
(@エンドレス)
ゲスト
結合: 11年前
投稿: 2
Topic starter  

多くのご助言、ありがとうございます。

いろいろ試したところ、サブメニューをグレーアウトさせる方法として
メニューのイベントハンドラ―を追加する際、メッセージの種類を、
UPDATE_COMMAND_UIとし、追加したOnUpdate*****(CCmdUI *pCmdUI)の中で
pCmdUI->Enable(FALSE);
とする、というものを発見しました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました