次の方法で共有


CMDIFrameWnd::MDISetMenu

更新 : 2007 年 11 月

MDI フレーム ウィンドウのメニュー、ウィンドウ ポップアップ メニュー、またはその両方を置き換えます。

CMenu* MDISetMenu(
   CMenu* pFrameMenu,
   CMenu* pWindowMenu 
);

パラメータ

  • pFrameMenu
    新しいフレーム ウィンドウ メニューのメニューを指定します。NULL のときは、メニューは変更されません。

  • pWindowMenu
    新しいウィンドウ ポップアップ メニューのメニューを指定します。NULL のときは、メニューは変更されません。

戻り値

このメッセージにより置き換えられたフレーム ウィンドウ メニューへのポインタを返します。このポインタは一時的である場合があるので、後で使用するために保持しておくことはできません。

解説

MDISetMenu 関数を呼び出した後で、アプリケーションは CWndDrawMenuBar メンバ関数を呼び出してメニュー バーを更新します。

この関数がウィンドウ ポップアップ メニューを置き換えると、MDI の子ウィンドウのメニュー項目は前のウィンドウ メニューから削除され、新しいウィンドウ ポップアップ メニューに追加されます。

MDI 子ウィンドウが最大表示されていて、この関数でフレーム ウィンドウのメニューを置き換えるときは、コントロール メニューと元に戻されたコントロールが前のフレーム ウィンドウのメニューから削除され、新しいメニューに追加されます。

MDI 子ウィンドウを管理するのに、フレームワークを使っている場合には、この関数を呼び出さないでください。

使用例

// CMdiView::OnReplaceMenu() is a menu command handler for CMdiView
// class, which in turn is a CView-derived class. It loads a new
// menu resource and replaces the main application window's menu
// bar with this new menu.
void CMdiView::OnReplaceMenu() 
{
   // Load a new menu resource named IDR_SHORT_MENU. m_hDefaultMenu is 
   // a member variable of CMdiDoc class (a CDocument-derived class). 
   // Its type is HMENU.
   CMdiDoc* pdoc = (CMdiDoc*)GetDocument();
   pdoc->m_hDefaultMenu = 
      ::LoadMenu(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_SHORT_MENU));
   if (pdoc->m_hDefaultMenu == NULL)
      return;

   // Get the parent window of this view window. The parent window is
   // a CMDIChildWnd-derived class. We can then obtain the MDI parent 
   // frame window using the CMDIChildWnd*. Then, replace the current 
   // menu bar with the new loaded menu resource.
   CMDIFrameWnd* frame = ((CMDIChildWnd*)GetParent())->GetMDIFrame();
   frame->MDISetMenu(CMenu::FromHandle(pdoc->m_hDefaultMenu), NULL);
   frame->DrawMenuBar();
}
// GetDefaultMenu() is an undocumented virtual function for 
// CDocument class. It allows the document to determine which 
// menu to display. m_hDefaultMenu is of type HMENU. Its value
// is initialized to NULL either in the constructor or 
// CDocument::OnNewDocument(). And the menu resource is destroyed
// in the destructor to avoid having too many menus loaded at once.
HMENU CMdiDoc::GetDefaultMenu()
{
   if (m_hDefaultMenu)
      return m_hDefaultMenu;

   return COleServerDoc::GetDefaultMenu();
}

// Initialize member variable(s) in the constructor. CMdiDoc is
// a CDocument-derived class.
CMdiDoc::CMdiDoc()
{
   // Use OLE compound files
   EnableCompoundFile();

   m_hDefaultMenu = NULL; // initialize to NULL
}

// Destroy menu resource in CMdiDoc's destructor. CMdiDoc is
// a CDocument-derived class.
CMdiDoc::~CMdiDoc()
{
   if (m_hDefaultMenu)
      ::DestroyMenu(m_hDefaultMenu);
}

必要条件

ヘッダー : afxwin.h

参照

参照

CMDIFrameWnd クラス

階層図

CWnd::DrawMenuBar

WM_MDISETMENU

その他の技術情報

CMDIFrameWnd のメンバ