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

解決


DPP  2008-08-07 17:56:12  No: 68823  IP: 192.*.*.*

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

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

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

編集 削除
仲澤@失業者  2008-08-07 18:19:28  No: 68824  IP: 192.*.*.*

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

編集 削除
仲澤@失業者  2008-08-07 18:27:13  No: 68825  IP: 192.*.*.*

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

編集 削除
夏みかん  2008-08-07 19:14:05  No: 68826  IP: 192.*.*.*

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

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 11:49:39  No: 68827  IP: 192.*.*.*

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

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

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

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

編集 削除