Partager via


CMDIFrameWnd::MDISetMenu

Remplace le menu d'une fenêtre frame MDI, dans le menu contextuel de la fenêtre, ou des deux.

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

Paramètres

  • pFrameMenu
    Spécifie le menu du nouveau menu de fenêtre frame. Si NULL, le menu n'est pas modifié.

  • pWindowMenu
    Spécifie le menu dans le menu contextuel de la fenêtre. Si NULL, le menu n'est pas modifié.

Valeur de retour

Un pointeur au menu de la fenêtre frame remplacé par ce message. Le pointeur peut être temporaire et ne doit pas être enregistré pour une utilisation ultérieure.

Notes

Après avoir appelé MDISetMenu, une application doit appeler la fonction membre de DrawMenuBar d' CWnd pour mettre à jour la barre de menus.

Si cet appel remplace le menu contextuel de la fenêtre, les éléments de menu fenêtre enfant MDI sont supprimés du menu Fenêtre précédent et ajoutés au menu contextuel de la fenêtre.

Si une fenêtre enfant MDI est agrandie et cet appel remplace le menu de fenêtre frame MDI, les contrôles de menu de contrôle et de restauration sont supprimés du menu de fenêtre frame précédent et ajoutés au nouveau menu.

N'appelez pas cette fonction membre si vous utilisez l'infrastructure pour gérer vos fenêtres MDI enfants.

Exemple

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

Configuration requise

Header: afxwin.h

Voir aussi

Référence

CMDIFrameWnd, classe

Graphique de la hiérarchie

CWnd::DrawMenuBar

WM_MDISETMENU