共用方式為


CMDIFrameWnd::MDISetMenu

取代 MDI 框架視窗的功能表,視窗快顯功能表或兩者。

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

參數

  • pFrameMenu
    指定新的框架視窗功能表的功能表。 如果為,則功能表未變更 NULL

  • pWindowMenu
    指定新視窗快顯功能表的功能表。 如果為,則功能表未變更 NULL

傳回值

此訊息取代的框架視窗功能表的指標。 指標可能是暫時的,而且不應儲存供日後使用。

備註

在呼叫 MDISetMenu後,應用程式必須呼叫 CWndDrawMenuBar 成員函式更新功能表列。

如果呼叫取代視窗快顯功能表, MDI 子視窗功能表項目從上一個視窗功能表中移除並加入新視窗快顯功能表。

如果 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);
}

需求

Header: afxwin.h

請參閱

參考

CMDIFrameWnd 類別

階層架構圖

CWnd::DrawMenuBar

WM_MDISETMENU