• ベストアンサー

メニュー等の動的な削除方法について

例えばクライアント領域をクリックすると、メニューバーやコマンドボタンを削除(非表示)し、クライアント領域のみにするにはどうすれば良いのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • darksky
  • ベストアンサー率66% (38/57)
回答No.1

どのような構成での質問かはわかりませんが、とりあえずMFC標準のSDI形式(ドキュメント~ビュー構成)での例です。 MDIやダイアログなどの場合は処理の仕方が全然違います。 まず、メニューやツールバーを管理しているのは、CFrameWndクラスの派生クラスになりますので、そのクラスにメニュー等を表示/非表示するための関数を定義します。 class CMainFrame : public CFrameWnd { public: void HideMenuBarAndToolBar(); void ShowMenuBarAndToolBar();         ・         ・         ・         ・ }; void CMainFrame::HideMenuBarAndToolBar() { CMenu* pMenu = GetMenu(); if(NULL == pMenu){ // // メニューとツールバー)が非表示の場合は何もしない。 // メニューが表示されているかの判断は、GetMenu()の戻り値がNULLではない場合とする。 return; } pMenu->DestroyMenu(); m_hMenuDefault = NULL; SetMenu(NULL); CControlBar* pBar = GetControlBar(ID_VIEW_TOOLBAR); if(pBar){ ShowControlBar(pBar, FALSE, FALSE); } } void CMainFrame::ShowMenuBarAndToolBar() { CMenu* pMenu = GetMenu(); if(pMenu){ // // メニューとツールバー)が表示の場合は何もしない。 return; } CMenu Menu; Menu.LoadMenu(IDR_MAINFRAME); m_hMenuDefault = Menu.Detach(); SetMenu(CMenu::FromHandle(m_hMenuDefault)); CControlBar* pBar = GetControlBar(ID_VIEW_TOOLBAR); if(pBar){ ShowControlBar(pBar, TRUE, FALSE); } } CDocument~CView構成の場合は、通常マウスイベントはCViewの方でしか取れないため、CViewクラスから派生したクラスでイベント処理を記述する。 その中で、CMainFrameクラスのメソッドを呼び出す。 CViewクラスからの派生クラスでMainFrm.hをインクルードする必要があるかも・・・ #include "MainFrm.h" // マウス左ダブルクリックの処理 void CXXXView::OnLButtonDblClk(UINT nFlags, CPoint point) { CView::OnLButtonDblClk(nFlags, point); CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd(); pMainWnd->HideMenuBarAndToolBar(); } // マウス右ダブルクリックの処理 void CXXXView::OnRButtonDblClk(UINT nFlags, CPoint point) { CView::OnRButtonDblClk(nFlags, point); CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd(); pMainWnd->ShowMenuBarAndToolBar(); }

VitaminBB
質問者

お礼

回答ありがとうございます。 回答通りでちゃんとできました。 最後にフレームも無くしてクライアント領域のみにしたいのですが可能なのでしょうか?

その他の回答 (2)

  • darksky
  • ベストアンサー率66% (38/57)
回答No.3

>やってみましたが、フレームは無くなりませんでした。 何も変化がなかったということでしょか。 WIN98の環境はありませんので確認はできませんので、スタイルのパラメータを変更してみてください。 ModifyStyle(0xFFFFFF, WS_OVERLAPPED); WS_OVERLAPPED以外の別の値をセットしてみてください。

VitaminBB
質問者

お礼

回答ありがとうございます。 教えていただいたコードでは、タイトルバーでの移動とXボタンでの終了が出来なくなりました。 以下のようにしたら、タイトルバーも消えましたが、フレームは無くなりません。 ************************** ModifyStyle(WS_BORDER | WS_CAPTION, 0 ); ModifyStyleEx( WS_EX_WINDOWEDGE |WS_EX_CLIENTEDGE, 0, SWP_FRAMECHANGED );

VitaminBB
質問者

補足

とりあえず以下でエッジも消えました。 LPCTSTR lpszClassName; CRect rect( 50, 50, 200, 100); HCURSOR hCursor = 0; DWORD dwStyle, dwExStyle; lpszClassName = AfxRegisterWndClass( CS_HREDRAW | CS_VREDRAW, hCursor); dwExStyle = WS_EX_WINDOWEDGE ;//| WS_EX_CLIENTEDGE;//エッジを無くす dwStyle = WS_VISIBLE | WS_POPUP ;//| WS_CAPTION ;//| WS_SYSMENU;// | WS_BORDER ;//| WS_THICKFRAME; CreateEx( dwExStyle, lpszClassName, _T("Test window"), dwStyle, rect, parent, NULL, NULL);//parent, NULL, NULL);

  • darksky
  • ベストアンサー率66% (38/57)
回答No.2

void CMainFrame::HideMenuBarAndToolBar() { CMenu* pMenu = GetMenu(); if(NULL == pMenu){ // // メニューとツールバー)が非表示の場合は何もしない。 // メニューが表示されているかの判断は、GetMenu()の戻り値がNULLではない場合とする。 return; } pMenu->DestroyMenu(); m_hMenuDefault = NULL; SetMenu(NULL); CControlBar* pBar = GetControlBar(ID_VIEW_TOOLBAR); if(pBar){ ShowControlBar(pBar, FALSE, FALSE); } CControlBar* pBar2 = GetControlBar(ID_VIEW_STATUS_BAR); if(pBar2 != NULL){ ShowControlBar(pBar2, FALSE, FALSE); } ModifyStyle(0xFFFFFF, WS_OVERLAPPED); } void CMainFrame::ShowMenuBarAndToolBar() { CMenu* pMenu = GetMenu(); if(pMenu){ // // メニューとツールバー)が表示の場合は何もしない。 return; } CMenu Menu; Menu.LoadMenu(IDR_MAINFRAME); m_hMenuDefault = Menu.Detach(); SetMenu(CMenu::FromHandle(m_hMenuDefault)); CControlBar* pBar = GetControlBar(ID_VIEW_TOOLBAR); if(pBar){ ShowControlBar(pBar, TRUE, FALSE); } CControlBar* pBar2 = GetControlBar(ID_VIEW_STATUS_BAR); if(pBar2 != NULL){ ShowControlBar(pBar2, TRUE, FALSE); } CRect rect; GetWindowRect(rect); ModifyStyle(0, WS_OVERLAPPEDWINDOW, TRUE); SetWindowPos(NULL, rect.left, rect.top, rect.Width() - 1, rect.Height() - 1, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE); SetWindowPos(NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE); Invalidate(); UpdateWindow(); }

VitaminBB
質問者

お礼

回答ありがとうございます。 環境を書き忘れていました。 環境 WIN98 VC++6.0 MFC SDIにて やってみましたが、フレームは無くなりませんでした。

関連するQ&A

  • 自動で「罫線」のメニューバーが開かないようにする設定はあるのでしょうか

    自動で「罫線」のメニューバーが開かないようにする設定はあるのでしょうか。 お世話になります。 ソフトは、Word 2003 SP3です。 メニューの「ツール」→「ユーザ設定」→「コマンド」タブ→「表/罫線」から、「罫線を引く」のコマンドボタンをメニューバーに追加しました。 メニューバーから、先の「罫線を引く」コマンドをクリックすると、自動で「罫線」のメニューバーが開きます。 これを自動で開かないようにする設定はあるのでしょうか。 よろしくお願いいたします。

  • エクスプローラのコンテキストメニューを削除したい

    こんにちは。 エクスプローラで何もない領域を右クリックした時に出るメニュー(「表示」「新規作成」など)に不要なものが表示されて困っています。 フォルダやファイルを選択した時の削除方法は分かるのですが。 出来るだけツール類はなしで、レジストリの編集でお願いします。

  • IE7メニューバーの表示について

    VISTAでIE7を使用しています。 メニューバーが表示されなくなりました。 ツールボタンの「メニューバー」にチェックが入ったままの状態です。 マイクロソフトのサイトの <メニューを常時表示するには > 1. Internet Explorer を開くには、[スタート] ボタン をクリックして、[Internet Explorer] をクリックします。 2. [ツール] ボタンをクリックして、[メニュー バー] を選択します。 を何度も試しているのですが、チェックが外れない状態です。 同じような経験をされた方おられましたら、解決方法をお知らせください。

  • アクセス2000のメニューバーの表示

    マイクロソフトアクセス2000です。プラットフォームはwinXP Proです。 標準のメニューバー(ファイル、編集、表示などの文字メニューがあるバー)が、何かの拍子に消えてしまいました。 メニューバーやツールバーの表示される領域を右クリックして「ユーザ設定」ダイアログを出して、初期状態に戻すなどをやってみても表示されません。 どなたかメニューバーの表示させる方法をご教授ください。

  • エクセル2007でメニューバーの非表示方法

    エクセル2000でファイルオープンの際にメニューバーを非表示にするようにマクロを書いていました。このたびエクセル2007に更新したところ、メニューバー(2007ではリボンというんですね)が非表示になりませんでした。シートにボタンを配しこのボタンから様々な作業をするように制御しておりましたので、リボンから直接作業されるのは困ります。 どなたかエクセル2007でのリボンの非表示の方法をご教示ください。 もしも無理であれば、組込みコマンドを指定して無効にする方法でも結構です。 少なくとも、リボンから[表示]→[マクロ]から直接マクロを実行されるのだけでも阻止したいです。 本当に困っています。 どなたか助けてください。よろしくお願いいたします。

  • 右クリックで「ハイパーリンクの削除」のショートカットメニューを表示させたい

    Excel2003です 教えてください ハイパーリンクの削除について 「無効にするハイパーリンク をマウスの右ボタンでクリックし、ショートカット メニューの [ハイパーリンクの削除] をクリックします。 」とExcelのヘルプにあるのですが 私のExcelでは 右クリックしても[ハイパーリンクの削除]のショートカットメニューが表示されません。 右クリックで「ハイパーリンクの削除」を表示させる方法を教えて下さい。

  • お気に入りボタンを削除したい

    XP で IE8を使っています。 メニューバーで「お気に入り(A)」と表示されているのですが、その下段に別のバーがあって、そこに「お気に入りボタン」があります。 このボタンを削除する方法を教えてください。 ツールバークリックでチェックが入っているのは「メニューバーのみ」です。

  • iTunesで曲を削除したい

    iTunesで曲の削除ができなくて困っています。 曲を選んで、右クリックしても「削除」のコマンドが表示されません。deleteボタンを押しても削除できないし、編集メニューの削除も選べなくなっています。 CDからインポートしたのですが、誤って同じCDを2回インポートしてしまったのです。HDDからも削除したいし、iTunesのメニューからも消したいのです。 フォルダごと削除したのですが、iTunes上では消えず、ファイルを探す、というようなメッセージが出ました。

  • i macのメニューバーに不審なアイコン

    imac(2007mid)を使用しています。今まで見た事のないアイコンが表示されていてびっくりしました。ネットワークの送受信を常に表示しているようです。 クリックしてもプルダウンメニューも出ず、何のアプリと関係しているアイコンか解りません。コマンドを押しながらメニューバーの外へドラックしようとしても、ちっとも動かず削除できません。このアイコンを見た事のある方はいませんか? 何のアプリに関係しているのか、どうやったら削除できるのか教えてください。

    • ベストアンサー
    • Mac
  • IE7のメニューバーが消えた(Windows Vista)

    Windows Vista UltimateにIE7を使用しています。 IE7のメニューバーを常時表示させていましたが、突然消えました。 何のタイミングで消えてしまったのか不明です。 ツールバーの何もない領域を右クリック→「メニューバー」のチェックは入っている状態です。 再度チェックを選択してもチェックは消えない状態です。 メニューバーを再び表示させる方法はあるでしょうか。

専門家に質問してみよう