Freigeben über


CMenu::InsertMenu

Fügt ein neues Menüelement in der Position ein, die von nPosition angegeben ist und verschiebt andere Elemente in das Menü.

BOOL InsertMenu( 
   UINT nPosition, 
   UINT nFlags, 
   UINT_PTR nIDNewItem = 0, 
   LPCTSTR lpszNewItem = NULL  
); 
BOOL InsertMenu( 
   UINT nPosition, 
   UINT nFlags, 
   UINT_PTR nIDNewItem, 
   const CBitmap* pBmp  
);

Parameter

  • nPosition
    Gibt das Menüelement an, vor dem das neue Menüelement eingefügt werden soll. Der nFlags-Parameter kann verwendet werden, um nPosition folgendermaßen zu interpretieren:

    nFlags

    Interpretation von nPosition

    MF_BYCOMMAND

    Gibt an, dass der Parameter der Befehls-ID des vorhandenen Menüelements gibt. Dies ist der Standardwert, wenn weder noch MF_BYCOMMANDMF_BYPOSITION festgelegt ist.

    MF_BYPOSITION

    Gibt an, dass der Parameter die Position des vorhandenen Menüelements gibt. Der erste Punkt befindet sich an Position 0. Wenn nPosition ist - 1, das neue Menüelement wird am Ende des Menüs angefügt.

  • nFlags
    Gibt an, wie nPosition interpretiert wird, und enthält Informationen über den Zustand des neuen Menüelements, wenn sie im Menü hinzugefügt wird. Eine Liste der Flags, die möglicherweise festgelegt werden, finden Sie die AppendMenu-Memberfunktion. Um mehr als einen Wert anzugeben, verwenden Sie den bitweisen Operator OR um sie mit dem MF_BYCOMMAND oder MF_BYPOSITION-Flag zu kombinieren.

  • nIDNewItem
    Gibt entweder die Befehls-ID des neuen Menüelements oder, wenn nFlags zu MF_POPUP festgelegt, das Menühandle (HMENU) des Popupmenüs an. Der Parameter wird ignoriert nIDNewItem (nicht erforderlich) wenn nFlags zu MF_SEPARATOR festgelegt ist.

  • lpszNewItem
    Gibt den Inhalt des neuen Menüelements an. nFlags kann verwendet werden, um lpszNewItem folgendermaßen zu interpretieren:

    nFlags

    Interpretation von lpszNewItem

    MF_OWNERDRAW

    Enthält einen von der Anwendung bereitgestellten 32-Bit-Wert, den die Anwendung verwenden kann, um die zusätzlichen Daten beizubehalten, die mit dem Menüelement zugeordnet werden. Dieser 32-Bit-Wert ist in der Anwendung im itemData-Member der Struktur verfügbar, die von der WM_MEASUREITEM und WM_DRAWITEM Meldungen angegeben wird. Diese Meldungen werden gesendet, wenn das Menüelement zuerst angezeigt oder geändert wird.

    MF_STRING

    Enthält einen langen Zeiger auf eine auf NULL endende Zeichenfolge. Dies ist die Standardinterpretation.

    MF_SEPARATOR

    Der Parameter wird ignoriert lpszNewItem (nicht erforderlich).

  • pBmp
    Zeigt auf CBitmap ein Objekt, das als das Menüelement verwendet wird.

Rückgabewert

Ungleich 0 (null), wenn die Funktion erfolgreich; 0 andernfalls.

Hinweise

Die Anwendung kann den Zustand des Menüelements mit Werten in nFlags angeben.

Wenn ein Menü, das in einem Fenster befinden, geändert wird (ob das Fenster angezeigt wird), sollte die Anwendung CWnd::DrawMenuBar aufrufen.

Wenn nIDNewItem ein Popupmenü angibt, wird Teil des Menüs, in dem sie eingefügt wird. Wenn dieses Menü zerstört wird, wird das Menü außerdem eingefügte zerstört. Ein eingefügtes Menü sollte ein CMenu-Objekt getrennt werden, um Konflikte zu vermeiden.

Wenn das aktive untergeordnete Fenster (Multiple Document Interface) und fügt einer Anwendung ein Popupmenü in das Menü der MDI-Anwendung maximiert wird, indem diese Funktion aufgerufen und das MF_BYPOSITION-Flag angibt, wird im Menü ein weiteres links der Position als erwartet eingefügt. Dies geschieht, weil das Systemmenü des aktiven untergeordneten MDI-Fensters an der ersten Position der Menüleiste des MDI-Rahmenfensters eingefügt wird. Um das Menü ordnungsgemäß zu positionieren, muss die Anwendung 1 dem Positionswert hinzufügen der andernfalls verwendet werden. Eine Anwendung kann die WM_MDIGETACTIVE Meldung verwenden, um nach gewünschtem aktuell aktive untergeordnetes Fenster maximiert wird.

Beispiel

// CMainFrame::OnChangeFileMenu() is a menu command handler for  
// CMainFrame class, which in turn is a CFrameWnd-derived class.  
// It modifies the File menu by inserting, removing and renaming  
// some menu items. Other operations include associating a context  
// help id and setting default menu item to the File menu.  
// CMainFrame is a CFrameWnd-derived class. 
void CMainFrame::OnChangeFileMenu() 
{
   // Get the menu from the application window.
   CMenu* mmenu = GetMenu();

   // Look for "File" menu.
   int pos = FindMenuItem(mmenu, _T("&File"));
   if (pos == -1)
      return;

   // Remove "New" menu item from the File menu.
   CMenu* submenu = mmenu->GetSubMenu(pos);
   pos = FindMenuItem(submenu, _T("&New\tCtrl+N"));
   if (pos > -1)
      submenu->RemoveMenu(pos, MF_BYPOSITION);

   // Look for "Open" menu item from the File menu. Insert a new 
   // menu item called "Close" right after the "Open" menu item.
   // ID_CLOSEFILE is the command id for the "Close" menu item.
   pos = FindMenuItem(submenu, _T("&Open...\tCtrl+O"));
   if (pos > -1)
      submenu->InsertMenu(pos + 1, MF_BYPOSITION, ID_CLOSEFILE, _T("&Close"));

   // Rename menu item "Exit" to "Exit Application".
   pos = FindMenuItem(submenu, _T("E&xit"));
   if (pos > -1)
   {
      UINT id = submenu->GetMenuItemID(pos);
      submenu->ModifyMenu(id, MF_BYCOMMAND, id, _T("E&xit Application"));
   }

   // Associate a context help ID with File menu, if one is not found. 
   // ID_FILE_CONTEXT_HELPID is the context help ID for the File menu 
   // that is defined in resource file.  
   if (submenu->GetMenuContextHelpId() == 0)
      submenu->SetMenuContextHelpId(ID_FILE_CONTEXT_HELPID);

   // Set "Open" menu item as the default menu item for the File menu, 
   // if one is not found. So, when a user double-clicks the File 
   // menu, the system sends a command message to the menu's owner  
   // window and closes the menu as if the File\Open command item had  
   // been chosen.  
   if (submenu->GetDefaultItem(GMDI_GOINTOPOPUPS, TRUE) == -1)
   {
      pos = FindMenuItem(submenu, _T("&Open...\tCtrl+O"));
      submenu->SetDefaultItem(pos, TRUE);
   }
}

// FindMenuItem() will find a menu item string from the specified 
// popup menu and returns its position (0-based) in the specified  
// popup menu. It returns -1 if no such menu item string is found. 
int FindMenuItem(CMenu* Menu, LPCTSTR MenuString)
{
   ASSERT(Menu);
   ASSERT(::IsMenu(Menu->GetSafeHmenu()));

   int count = Menu->GetMenuItemCount();
   for (int i = 0; i < count; i++)
   {
      CString str;
      if (Menu->GetMenuString(i, str, MF_BYPOSITION) &&
         str.Compare(MenuString) == 0)
         return i;
   }

   return -1;
}

Anforderungen

Header: afxwin.h

Siehe auch

Referenz

CMenu-Klasse

Hierarchiediagramm

CMenu::AppendMenu

CWnd::DrawMenuBar

CMenu::SetMenuItemBitmaps

CMenu::Detach

InsertMenu