Freigeben über


CMDIFrameWnd::MDISetMenu

Ersetzt das Menü eines MDI-Rahmenfensters, des Fensterpopupmenüs oder der beider.

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

Parameter

  • pFrameMenu
    Gibt das Menü des neuen Rahmenfenstermenüs an. Wenn NULL, das Menü nicht geändert wird.

  • pWindowMenu
    Gibt das Menü des Popupmenüs des neuen Fensters angezeigt. Wenn NULL, das Menü nicht geändert wird.

Rückgabewert

Ein Zeiger auf Rahmenfenstermenü ersetzt durch diese Meldung. Der Zeiger kann und sollte nicht für die spätere Verwendung gespeichert werden temporär.

Hinweise

Nach dem MDISetMenu aufgerufen hat, muss eine Anwendung die DrawMenuBar-Memberfunktion der CWnd aufrufen, um die Menüleiste zu aktualisieren.

Wenn dieser Aufruf das Fensterpopupmenü ersetzt, werden Menüelemente des untergeordneten MDI-Fensters vom vorherigen Fenster entfernt und hinzugefügt Popupmenü des neuen Fensters.

Wenn ein untergeordnetes MDI-Fenster maximiert wird und dieser Aufruf das MDI-Rahmenfenstermenü ersetzt werden, die Systemmenü- und Wiederherstellungssteuerelemente vom vorherigen Rahmenfenstermenü entfernt und neue Menü hinzugefügt.

Rufen Sie die Memberfunktion auf, wenn Sie das Framework verwenden, um die untergeordneten MDI-Fenster zu verwalten.

Beispiel

// 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);
}

Anforderungen

Header: afxwin.h

Siehe auch

Referenz

CMDIFrameWnd-Klasse

Hierarchiediagramm

CWnd::DrawMenuBar

WM_MDISETMENU