メニューを非表示にするには

解決


DPP  2008-08-08 02:56:12  No: 68823

VisualC++2005、MFC、ダイアログベースで作成しています。

リソースビューからMenuを追加し、メインダイアログに表示させています。
これを一部、非表示にしたいのですが、できますか?
(淡色表示ではなく表示そのものをなくしたい)

デバッグ時には表示しておいて、リリース時には非表示にしたいのです。
初歩的な質問かも知れませんがよろしくお願い致します。


仲澤@失業者  2008-08-08 03:19:28  No: 68824

CMenu::LoadMenu()
CWnd::SetMenu()
で動的に設定すれば良いと思うのですが。
つまりリリースのときはやらなければよしと。


仲澤@失業者  2008-08-08 03:27:13  No: 68825

おっと、リソースかぁ。
あまり勧めませんが
  CWnd::SetMenu( NULL);
かな、できたら
  CWnd:GetMenu();
  CMenu::DestroyMenu();
しといたほうが丸。たぶん。


夏みかん  2008-08-08 04:14:05  No: 68826

> デバッグ時には表示しておいて、リリース時には非表示にしたいのです。
リソースファイルを直接編集するのはどうですか?

IDR_MAINMENU MENU
BEGIN
    POPUP "ファイル(&F)"
    BEGIN
        MENUITEM "項目1", IDM_XXXX
        MENUITEM "項目2", IDM_XXXX
        MENUITEM "項目3", IDM_XXXX
    END
#ifdef _DEBUG
    POPUP "デバッグ(&D)"
    BEGIN
        MENUITEM "項目1", IDM_XXXX
        MENUITEM "項目2", IDM_XXXX
    END
#endif
    POPUP "ヘルプ(&H)"
    BEGIN
        MENUITEM "項目1", IDM_XXXX
    END
END
こするとデバッグ時だけ[デバッグ(D)]というメニュー項目が表示されます。
この方法ならリソースの差し替えだけで簡単にメニューの表示と非表示が出来ます。

動的に非表示するならデバッグ時に表示されるメニューをリソースビューでセット。
初期化ルーチンで非表示にしたい項目を DeleteMenu() 関数で削除します。
#ifdef _DEBUG
::DeleteMenu( hMenu, 1, MF_BYPOSITION );
#endif

どちらでもお好きな方法を。


DPP  2008-08-08 20:49:39  No: 68827

仲澤@失業者さん、夏みかんさん

ありがとうございます。
夏みかんさんの後者の方法で実行してみたところ、うまくいきました。
リソースファイルをいじるのには抵抗があったので。。。

仲澤@失業者さんからのアドバイス頂いたDestroyMenuも後々試してみたいと思います。

ありがとうございました。


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

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






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