次の方法で共有


CMDIFrameWnd::MDISetMenu

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 のメンバー