CMenu::InsertMenu
Insere um novo item de menu na posição especificada por nPosition e move os outros itens do menu suspenso.
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
);
Parâmetros
nPosition
Especifica o item de menu antes da qual o novo item de menu é a ser inserido.The nFlags parâmetro pode ser usado para interpretar nPosition das seguintes maneiras:nFlags
Interpretação dos nPosition
MF_BYCOMMAND
Especifica que o parâmetro fornece a ID de comando do item de menu existente.Este é o padrão se nenhuma das MF_BYCOMMAND nor MF_BYPOSITION é definida.
MF_BYPOSITION
Especifica que o parâmetro oferece a posição do item de menu existente.O primeiro item é na posição 0.If nPosition é – 1, o novo item de menu é acrescentado ao participante do menu.
nFlags
Especifica como nPosition é interpretado e especifica informações sobre o estado do novo item de menu quando ele é adicionado ao menu. Para obter uma lista de sinalizadores que podem ser conjunto, consulte o AppendMenufunção de membro .Para especificar mais de um valor, use o operador OR bit a bit para combiná-las com o MF_BYCOMMAND or MF_BYPOSITION sinalizar.nIDNewItem
Especifica a ID de comando do novo item de menu ou, se nFlags é definido como MF_POPUP, o identificador de menu (HMENU) do menu pop-up. The nIDNewItem parâmetro é ignorado (não necessários) se nFlags é conjunto para MF_SEPARATOR.lpszNewItem
Especifica o conteúdo do novo item de menu.nFlags pode ser usado para interpretar lpszNewItem das seguintes maneiras:nFlags
Interpretação dos lpszNewItem
MF_OWNERDRAW
Contém um valor de 32 bit fornecido pelo aplicativo que o aplicativo pode usar para manter dados adicionais associados ao item de menu.Este valor de 32 bit estará disponível para o aplicativo no itemData a estrutura fornecida pelo membroWM_MEASUREITEM and WM_DRAWITEM mensagens.Essas mensagens são enviadas quando o item de menu é exibido inicialmente ou for alterado.
MF_STRING
Contém um ponteiro longo em uma seqüência de caracteres terminada com caractere nulo.Esta é a interpretação do padrão.
MF_SEPARATOR
The lpszNewItem parâmetro será ignorado (necessária).
pBmp
Aponta para um CBitmap objeto que será usado sistema autônomo o item de menu.
Valor de retorno
Diferente de zero se a função for bem-sucedida; caso contrário, 0.
Comentários
O aplicativo pode especificar o estado do item de menu, definindo valores em nFlags.
Sempre que um menu que reside em uma janela é alterado (ou não a janela é exibida), o aplicativo deve chamar CWnd::DrawMenuBar.
Quando nIDNewItem Especifica um menu pop-up, ele se torna parte do menu no qual ela está inserida. Se esse menu é destruído, o menu inserido também será destruído.Um menu inserido deve ser desanexado de um CMenu objeto para evitar o conflito.
Se ativo vários documento MDI (interface) filho janela estiver maximizada e um aplicativo insere um menu pop-up no menu do aplicativo MDI chamar essa função e especificando o MF_BYPOSITION sinalizar, o menu é inserida uma posição mais à esquerda que o esperado.Isso acontece porque o menu de controle da janela filho MDI ativo é inserido na primeira posição da BAR de menus da janela de quadro MDI.Para posicionar o menu corretamente, o aplicativo deve adicionar 1 ao que seria usado caso contrário, o valor da posição.Um aplicativo pode usar o WM_MDIGETACTIVE mensagem para determinar se a janela filho atualmente ativo está maximizada.
Exemplo
// 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;
}
Requisitos
Cabeçalho: afxwin.h