CMenu::InsertMenu

Inserisce una nuova voce di menu nella posizione specificata da nPosition e sposta altri elementi nel menu.

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

Parametri

  • nPosition
    Specifica la voce di menu prima della nuova voce di menu deve essere immessa.Il parametro nFlags può essere utilizzato per interpretare nPosition nei modi seguenti:

    nFlags

    Interpretazione di nPosition

    MF_BYCOMMAND

    Specifica che il parametro fornisce l'id di comando voce di menu esistente.Questa è l'impostazione predefinita se non MF_BYCOMMANDMF_BYPOSITION è impostato su.

    MF_BYPOSITION

    Specifica che il parametro fornisce la posizione della voce di menu esistente.Il primo elemento è la posizione 0.Se nPosition è a 1, la nuova voce di menu viene aggiunto alla fine del menu.

  • nFlags
    Specifica come nPosition viene interpretato e specifica le informazioni sullo stato della nuova voce di menu quando viene aggiunto al menu.Per un elenco di flag che possono essere impostati, vedere la funzione membro AppendMenu.Per specificare più di un valore, utilizzare l'operatore OR bit per combinarli con il flag MF_BYPOSITION o MF_BYCOMMAND.

  • nIDNewItem
    Specifica l'id di comando nuova voce di menu o, se nFlags è impostato su MF_POPUP, l'handle del menu (HMENU) del menu di scelta rapida.Il parametro nIDNewItem viene ignorato e non necessario) se nFlags è impostato su MF_SEPARATOR.

  • lpszNewItem
    Specifica il contenuto della nuova voce di menu.nFlags può essere utilizzato per interpretare lpszNewItem nei modi seguenti:

    nFlags

    Interpretazione di lpszNewItem

    MF_OWNERDRAW

    Contiene un valore a 32 bit applicazione fornito l'applicazione può utilizzare per gestire i dati aggiuntivi associati alla voce di menu.Questo valore a 32 bit è disponibile all'applicazione nel membro itemData della struttura fornita da messaggi WM_DRAWITEM e WM_MEASUREITEM.Questi messaggi vengono inviati quando la voce di menu vengono visualizzati inizialmente o viene modificata.

    MF_STRING

    Contiene un puntatore lungo una stringa con terminazione null.Si tratta dell'interpretazione predefinita.

    MF_SEPARATOR

    Il parametro lpszNewItem viene ignorato e non necessario).

  • pBmp
    Punta a CBitmap oggetto che verrà utilizzato come la voce di menu.

Valore restituito

Diverso da zero se la funzione ha esito positivo; in caso contrario 0.

Note

L'applicazione può specificare lo stato della voce di menu impostando i valori in nFlags.

Ogni volta che un menu che si trova in una finestra viene modificato (se la finestra visualizzata), l'applicazione deve chiamare CWnd::DrawMenuBar.

Quando nIDNewItem specifica un menu di scelta rapida, diventa parte del menu in cui viene inserita.Se il menu viene eliminato, il menu immesso viene distrutto.Un menu immesso deve essere rimosso da un oggetto CMenu per evitare il conflitto.

Se la finestra figlio attiva (MDI) dell'interfaccia a documenti multipli viene ingrandita e inserimenti di un'applicazione un menu di scelta rapida nel menu dell'applicazione MDI chiamando la funzione e specificando il flag MF_BYPOSITION, menu viene inserito una sinistra più lontana posizione del previsto.Ciò si verifica in quanto i menu del controllo della finestra figlio MDI attiva nella prima posizione della barra dei menu della finestra cornice MDI.Per posizionare il menu correttamente, l'applicazione deve aggiungere 1 al valore del percorso che verrà utilizzato in caso contrario.Un'applicazione può utilizzare il messaggio WM_MDIGETACTIVE per determinare se attualmente alla finestra figlio attiva è stata ingrandita.

Esempio

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

Requisiti

Header: afxwin.h

Vedere anche

Riferimenti

Classe di CMenu

Grafico della gerarchia

CMenu::AppendMenu

CWnd::DrawMenuBar

CMenu::SetMenuItemBitmaps

CMenu::Detach

InsertMenu