CMenu::InsertMenu
지정 된 위치에 새 메뉴 항목을 삽입 합니다. nPosition 및 다른 항목에 메뉴 아래로 이동 합니다.
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
);
매개 변수
nPosition
새 메뉴 항목이 삽입 되는 전에 메뉴 항목을 지정 합니다. nFlags 매개 변수를 사용 하 여 해석 하 nPosition 를 사용할 수 있습니다.nFlags
Nposition의 해석
MF_BYCOMMAND
지정 매개 변수는 기존 메뉴 항목의 명령 ID를 제공 합니다. 두 경우 이것이 기본값입니다 MF_BYCOMMAND 또는 MF_BYPOSITION 설정 됩니다.
MF_BYPOSITION
지정 매개 변수는 기존 메뉴 항목의 위치를 제공 합니다. 첫 번째 항목은 0 위치에 있습니다. 경우 nPosition – 1 이며 새 메뉴 항목은 메뉴의 끝에 추가 됩니다.
nFlags
지정 하는 방법 nPosition 해석 되 고을 메뉴에 추가할 때 새 메뉴 항목의 상태에 대 한 정보를 지정 합니다. 설정할 수 있는 플래그 목록을 참조 하십시오의 AppendMenu 멤버 함수입니다. 둘 이상의 값을 지정 하려면 비트 OR 연산자 두 가지를 함께 사용 된 MF_BYCOMMAND 또는 MF_BYPOSITION 플래그.nIDNewItem
새 메뉴 항목의 명령 ID를 지정 합니다. 또는 if nFlags 설정 MF_POPUP, 메뉴 핸들 (HMENU)의 팝업 메뉴. nIDNewItem 매개 변수는 무시 (필요 없음) 경우 nFlags 설정 MF_SEPARATOR.lpszNewItem
새 메뉴 항목의 내용을 지정합니다. nFlags해석 하는 데 사용 lpszNewItem 를 사용할 수 있습니다.nFlags
Lpsznewitem의 해석
MF_OWNERDRAW
응용 프로그램 메뉴 항목과 연결 된 추가 데이터를 유지 하는 데 사용할 수 있는 응용 프로그램 제공 32 비트 값을 포함 합니다. 이 32 비트 값을 응용 프로그램에 사용할 수 있는 itemData 제공한 구조체의 멤버는 WM_MEASUREITEM 및 WM_DRAWITEM 메시지. 메뉴 항목의 처음을 표시 하거나 변경할 때 이러한 메시지가 전송 됩니다.
MF_STRING
긴 포인터를 null로 끝나는 문자열을 포함합니다. 이 기본 해석입니다.
MF_SEPARATOR
lpszNewItem (필요 하지 않은) 매개 변수가 무시 됩니다.
pBmp
가리키는 있는 CBitmap 개체 메뉴 항목으로 사용 됩니다.
반환 값
함수가 성공 하면 0이 아닌. 그렇지 않으면 0입니다.
설명
응용 프로그램에서 값을 설정 하 여 메뉴 항목의 상태를 지정할 수 있습니다 nFlags.
메뉴에 있는 때마다 창 변경 (창의 표시 여부), 응용 프로그램에서 호출 해야 CWnd::DrawMenuBar.
때 nIDNewItem 팝업 메뉴에서 지정 된 삽입 메뉴의 일부가. 해당 메뉴를 소멸 하는 경우 삽입된 메뉴도 소멸 됩니다. 삽입된 메뉴에서 끊어야는 CMenu 개체를 충돌을 피하기 위해.
다중 문서 인터페이스 (MDI) 자식 창이 최대화 되어 현재 및 응용 프로그램에 삽입 하면 팝업 메뉴가 MDI 응용 프로그램의 메뉴에이 함수를 호출 하 고 지정 하 여는 MF_BYPOSITION 플래그 메뉴는 예상 보다 멀리 왼쪽 한 위치에 삽입 합니다. 활성 MDI 자식 창의 컨트롤 메뉴가 MDI 프레임 창의 메뉴 모음의 첫 번째 위치로 삽입 됩니다 때문에 발생 합니다. 메뉴를 제대로 배치 하려면 응용 프로그램 그렇지 않으면 사용 될 위치 값에 1을 추가 해야 합니다. 응용 프로그램의 WM_MDIGETACTIVE 메시지가 현재 활성 자식 창이 최대화 되어 있는지 여부를 결정 합니다.
예제
// 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;
}
요구 사항
헤더: afxwin.h