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_BYCOMMAND né MF_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