다음을 통해 공유


CMenu 수업

Windows HMENU의 캡슐화입니다.

구문

class CMenu : public CObject

멤버

공용 생성자

속성 설명
CMenu::CMenu CMenu 개체를 생성합니다.

공용 메서드

이름 설명
CMenu::AppendMenu 이 메뉴의 끝에 새 항목을 추가합니다.
CMenu::Attach 개체에 Windows 메뉴 핸들을 CMenu 연결합니다.
CMenu::CheckMenuItem 팝업 메뉴의 메뉴 항목 옆에 확인 표시를 배치하거나 확인 표시를 제거합니다.
CMenu::CheckMenuRadioItem 메뉴 항목 옆에 라디오 단추를 배치하고 그룹의 다른 모든 메뉴 항목에서 라디오 단추를 제거합니다.
CMenu::CreateMenu 빈 메뉴를 만들어 개체에 CMenu 연결합니다.
CMenu::CreatePopupMenu 빈 팝업 메뉴를 만들어 개체에 CMenu 연결합니다.
CMenu::DeleteMenu 메뉴에서 지정된 항목을 삭제합니다. 메뉴 항목에 연결된 팝업 메뉴가 있는 경우 팝업 메뉴에 대한 핸들을 삭제하고 사용하는 메모리를 해제합니다.
CMenu::DeleteTempMap 멤버 함수에서 만든 임시 CMenu 개체를 FromHandle 삭제합니다.
CMenu::DestroyMenu 개체에 연결된 CMenu 메뉴를 삭제하고 메뉴가 차지하는 메모리를 해제합니다.
CMenu::Detach 개체에서 Windows 메뉴 핸들을 CMenu 분리하고 핸들을 반환합니다.
CMenu::DrawItem 소유자가 그린 메뉴의 시각적 측면이 변경되면 프레임워크에서 호출됩니다.
CMenu::EnableMenuItem 메뉴 항목을 사용하거나 사용하지 않도록 설정하거나 흐리게 표시(회색)합니다.
CMenu::FromHandle Windows 메뉴 핸들이 CMenu 지정된 개체에 대한 포인터를 반환합니다.
CMenu::GetDefaultItem 지정된 메뉴에서 기본 메뉴 항목을 결정합니다.
CMenu::GetMenuContextHelpId 메뉴와 연결된 도움말 컨텍스트 ID를 검색합니다.
CMenu::GetMenuInfo 특정 메뉴의 정보를 검색합니다.
CMenu::GetMenuItemCount 팝업 또는 최상위 메뉴의 항목 수를 결정합니다.
CMenu::GetMenuItemID 지정된 위치에 있는 메뉴 항목의 메뉴 항목 식별자를 가져옵니다.
CMenu::GetMenuItemInfo 메뉴 항목에 대한 정보를 검색합니다.
CMenu::GetMenuState 지정한 메뉴 항목의 상태 또는 팝업 메뉴의 항목 수를 반환합니다.
CMenu::GetMenuString 지정된 메뉴 항목의 레이블을 검색합니다.
CMenu::GetSafeHmenu CMenu 개체에 m_hMenu 의해 래핑된 값을 반환합니다.
CMenu::GetSubMenu 팝업 메뉴에 대한 포인터를 검색합니다.
CMenu::InsertMenu 지정된 위치에 새 메뉴 항목을 삽입하고 다른 항목을 메뉴 아래로 이동합니다.
CMenu::InsertMenuItem 메뉴의 지정된 위치에 새 메뉴 항목을 삽입합니다.
CMenu::LoadMenu 실행 파일에서 메뉴 리소스를 로드하고 개체에 CMenu 연결합니다.
CMenu::LoadMenuIndirect 메모리의 메뉴 템플릿에서 메뉴를 로드하고 개체에 CMenu 연결합니다.
CMenu::MeasureItem 소유자가 그린 메뉴를 만들 때 메뉴 크기를 결정하기 위해 프레임워크에서 호출됩니다.
CMenu::ModifyMenu 지정된 위치에서 기존 메뉴 항목을 변경합니다.
CMenu::RemoveMenu 지정된 메뉴에서 연결된 팝업 메뉴가 있는 메뉴 항목을 삭제합니다.
CMenu::SetDefaultItem 지정된 메뉴의 기본 메뉴 항목을 설정합니다.
CMenu::SetMenuContextHelpId 메뉴와 연결할 도움말 컨텍스트 ID를 설정합니다.
CMenu::SetMenuInfo 특정 메뉴에 대한 정보를 설정합니다.
CMenu::SetMenuItemBitmaps 지정된 확인 표시 비트맵을 메뉴 항목과 연결합니다.
CMenu::SetMenuItemInfo 메뉴 항목에 대한 정보를 변경합니다.
CMenu::TrackPopupMenu 지정된 위치에 부동 팝업 메뉴를 표시하고 팝업 메뉴에서 항목 선택을 추적합니다.
CMenu::TrackPopupMenuEx 지정된 위치에 부동 팝업 메뉴를 표시하고 팝업 메뉴에서 항목 선택을 추적합니다.

Public 연산자

속성 설명
CMenu::operator HMENU 메뉴 개체의 핸들을 검색합니다.
CMenu::operator != 두 메뉴 개체가 같지 않은지 여부를 확인합니다.
CMenu::operator == 두 메뉴 개체가 같은지 여부를 확인합니다.

공용 데이터 멤버

속성 설명
CMenu::m_hMenu 개체에 연결된 Windows 메뉴에 대한 핸들을 CMenu 지정합니다.

설명

메뉴를 만들고, 추적하고, 업데이트하고, 삭제하는 멤버 함수를 제공합니다.

CMenu 스택 프레임에 로컬로 개체를 만든 다음, 필요에 따라 '의 멤버 함수를 호출CMenu하여 새 메뉴를 조작합니다. 다음으로, CWnd::SetMenu 메뉴를 창으로 설정하고 개체의 Detach 멤버 함수를 즉시 호출합니다CMenu. 멤버 함수는 CWnd::SetMenu 창의 메뉴를 새 메뉴로 설정하고, 창이 메뉴 변경을 반영하도록 다시 그려지게 하고, 메뉴의 소유권을 창에 전달합니다. 지역 CMenu 변수가 범위를 CMenu 벗어나면 개체 소멸자가 더 이상 소유하지 않는 메뉴를 삭제하려고 시도하지 않도록 개체에서 CMenu 분리 HMENU 하는 호출 Detach 입니다. 창이 제거되면 메뉴 자체가 자동으로 제거됩니다.

멤버 함수를 LoadMenuIndirect 사용하여 메모리의 템플릿에서 메뉴를 만들 수 있지만 호출을 통해 LoadMenu 리소스에서 만든 메뉴는 더 쉽게 유지 관리되며 메뉴 편집기에서 메뉴 리소스 자체를 만들고 수정할 수 있습니다.

상속 계층 구조

CObject

CMenu

요구 사항

머리글: afxwin.h

CMenu::AppendMenu

메뉴 끝에 새 항목을 추가합니다.

BOOL AppendMenu(
    UINT nFlags,
    UINT_PTR nIDNewItem = 0,
    LPCTSTR lpszNewItem = NULL);

BOOL AppendMenu(
    UINT nFlags,
    UINT_PTR nIDNewItem,
    const CBitmap* pBmp);

매개 변수

nFlags
메뉴에 추가할 때 새 메뉴 항목의 상태에 대한 정보를 지정합니다. 설명 섹션에 나열된 값 중 하나 이상으로 구성됩니다.

nIDNewItem
새 메뉴 항목의 명령 ID 또는 nFlags 팝업 메뉴의 메뉴 핸들(HMENU)을 MF_POPUP지정합니다. nIDNewItem 로 설정된 MF_SEPARATOR경우 nFlags 매개 변수가 무시됩니다(필요하지 않음).

lpszNewItem
새 메뉴 항목의 내용을 지정합니다. 매개 nFlags 변수는 다음과 같은 방식으로 해석 lpszNewItem 하는 데 사용됩니다.

nFlags 의 해석 lpszNewItem
MF_OWNERDRAW 애플리케이션이 메뉴 항목과 연결된 추가 데이터를 유지하는 데 사용할 수 있는 애플리케이션 제공 32비트 값을 포함합니다. 이 32비트 값은 애플리케이션이 처리 및 WM_DRAWITEM 메시지를 처리 WM_MEASUREITEM 할 때 사용할 수 있습니다. 값은 해당 메시지와 함께 제공되는 구조체의 멤버에 저장 itemData 됩니다.
MF_STRING null로 끝나는 문자열에 대한 포인터를 포함합니다. 이것이 기본 해석입니다.
MF_SEPARATOR lpszNewItem 매개 변수는 무시됩니다(필요하지 않음).

pBmp
CBitmap 메뉴 항목으로 사용할 개체를 가리킵니다.

Return Value

함수가 성공하면 0이 아니고 그렇지 않으면 0입니다.

설명

애플리케이션에서 값을 설정하여 메뉴 항목의 상태를 지정할 수 있습니다 nFlags. nIDNewItem 팝업 메뉴를 지정하면 팝업 메뉴가 추가되는 메뉴의 일부가 됩니다. 해당 메뉴가 제거되면 추가된 메뉴도 제거됩니다. 충돌을 방지하려면 추가된 메뉴를 개체에서 CMenu 분리해야 합니다. MF_STRING MF_OWNERDRAW 의 비트맵 버전AppendMenu에는 유효하지 않습니다.

다음 목록에서는 설정할 수 있는 플래그에 대해 설명합니다.nFlags

  • MF_CHECKED 항목 옆에 기본 확인 표시를 배치하는 토글 MF_UNCHECKED 역할을 합니다. 애플리케이션에서 확인 표시 비트맵(멤버 함수 참조 SetMenuItemBitmaps )을 제공하면 "확인 표시 켜기" 비트맵이 표시됩니다.

  • MF_UNCHECKED 항목 옆에 있는 확인 표시를 제거하는 토글 MF_CHECKED 역할을 합니다. 애플리케이션에서 확인 표시 비트맵(멤버 함수 참조 SetMenuItemBitmaps )을 제공하면 "확인 표시 해제" 비트맵이 표시됩니다.

  • MF_DISABLED 메뉴 항목을 선택할 수 없지만 흐리게 표시하지 않도록 메뉴 항목을 사용하지 않도록 설정합니다.

  • MF_ENABLED 메뉴 항목을 선택할 수 있도록 설정하고 흐리게 표시된 상태에서 복원합니다.

  • MF_GRAYED 메뉴 항목을 선택할 수 없도록 비활성화하고 흐리게 표시합니다.

  • MF_MENUBARBREAK 항목을 정적 메뉴의 새 줄 또는 팝업 메뉴의 새 열에 배치합니다. 새 팝업 메뉴 열은 이전 열과 세로 구분선으로 구분됩니다.

  • MF_MENUBREAK 항목을 정적 메뉴의 새 줄 또는 팝업 메뉴의 새 열에 배치합니다. 열 사이에 구분선이 배치되지 않습니다.

  • MF_OWNERDRAW 항목이 소유자 그리기 항목임을 지정합니다. 메뉴가 처음으로 표시되면 메뉴를 소유하는 창에서 메뉴 항목의 높이와 너비를 검색하는 메시지를 받 WM_MEASUREITEM 습니다. 이 WM_DRAWITEM 메시지는 소유자가 메뉴 항목의 시각적 모양을 업데이트해야 할 때마다 전송되는 메시지입니다. 최상위 메뉴 항목에는 이 옵션이 유효하지 않습니다.

  • MF_POPUP 메뉴 항목에 연결된 팝업 메뉴가 있음을 지정합니다. ID 매개 변수는 항목과 연결할 팝업 메뉴에 대한 핸들을 지정합니다. 이는 팝업 메뉴 항목에 최상위 팝업 메뉴 또는 계층적 팝업 메뉴를 추가하는 데 사용됩니다.

  • MF_SEPARATOR 가로 구분선을 그립니다. 팝업 메뉴에서만 사용할 수 있습니다. 이 줄은 흐리게 표시하거나 사용하지 않도록 설정하거나 강조 표시할 수 없습니다. 다른 매개 변수는 무시됩니다.

  • MF_STRING 메뉴 항목이 문자열임을 지정합니다.

다음 각 그룹은 상호 배타적이고 함께 사용할 수 없는 플래그를 나열합니다.

  • MF_DISABLED, MF_ENABLEDMF_GRAYED

  • MF_STRING, MF_OWNERDRAW, MF_SEPARATOR및 비트맵 버전

  • MF_MENUBARBREAKMF_MENUBREAK

  • MF_CHECKEDMF_UNCHECKED

창에 있는 메뉴가 변경될 때마다(창이 표시되는지 여부) 애플리케이션에서 호출 CWnd::DrawMenuBar해야 합니다.

예시

CMenu::CreateMenu에 대한 예를 참조하세요.

CMenu::Attach

개체에 기존 Windows 메뉴를 CMenu 연결합니다.

BOOL Attach(HMENU hMenu);

매개 변수

hMenu
Windows 메뉴에 대한 핸들을 지정합니다.

Return Value

작업이 성공한 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

메뉴가 개체에 이미 연결되어 있는 경우 이 함수를 CMenu 호출하면 안 됩니다. 메뉴 핸들은 데이터 멤버에 m_hMenu 저장됩니다.

조작하려는 메뉴가 이미 창과 연결된 경우 함수를 CWnd::GetMenu 사용하여 메뉴에 대한 핸들을 가져올 수 있습니다.

예시

CMenu mnu;
HMENU hmnu = AfxGetMainWnd()->GetMenu()->GetSafeHmenu();
mnu.Attach(hmnu);

// Now you can manipulate the window's menu as a CMenu
// object...

mnu.Detach();

CMenu::CheckMenuItem

팝업 메뉴의 메뉴 항목에서 확인 표시를 추가하거나 제거합니다.

UINT CheckMenuItem(
    UINT nIDCheckItem,
    UINT nCheck);

매개 변수

nIDCheckItem
에 의해 nCheck결정된 대로 확인할 메뉴 항목을 지정합니다.

nCheck
메뉴 항목을 확인하는 방법과 메뉴에서 항목의 위치를 확인하는 방법을 지정합니다. 매개 변수는 nCheck 플래그 또는 MF_UNCHECKED MF_BYPOSITION MF_BYCOMMAND 플래그의 MF_CHECKED 조합일 수 있습니다. 이러한 플래그는 비트 OR 연산자를 사용하여 결합할 수 있습니다. 다음과 같은 의미가 있습니다.

  • MF_BYCOMMAND 매개 변수가 기존 메뉴 항목의 명령 ID를 제공하도록 지정합니다. 기본값입니다.

  • MF_BYPOSITION 매개 변수가 기존 메뉴 항목의 위치를 제공하도록 지정합니다. 첫 번째 항목은 위치 0에 있습니다.

  • MF_CHECKED 항목 옆에 기본 확인 표시를 배치하는 토글 MF_UNCHECKED 역할을 합니다.

  • MF_UNCHECKED 항목 옆에 있는 확인 표시를 제거하는 토글 MF_CHECKED 역할을 합니다.

Return Value

항목의 이전 상태입니다MF_CHECKED. 또는 MF_UNCHECKED0xFFFFFFFF 메뉴 항목이 없는 경우

설명

매개 변수는 nIDCheckItem 수정할 항목을 지정합니다.

매개 변수는 nIDCheckItem 팝업 메뉴 항목과 메뉴 항목을 식별할 수 있습니다. 팝업 메뉴 항목을 확인하는 데 특별한 단계가 필요하지 않습니다. 최상위 메뉴 항목을 확인할 수 없습니다. 팝업 메뉴 항목과 연결된 메뉴 항목 식별자가 없으므로 위치별로 선택해야 합니다.

예시

CMenu::GetMenuState에 대한 예를 참조하세요.

CMenu::CheckMenuRadioItem

지정된 메뉴 항목을 확인하고 라디오 항목으로 만듭니다.

BOOL CheckMenuRadioItem(
    UINT nIDFirst,
    UINT nIDLast,
    UINT nIDItem,
    UINT nFlags);

매개 변수

nIDFirst
라디오 단추 그룹의 첫 번째 메뉴 항목(값 nFlags에 따라 ID 또는 오프셋)을 지정합니다.

nIDLast
라디오 단추 그룹의 마지막 메뉴 항목(값 nFlags에 따라 ID 또는 오프셋)을 지정합니다.

nIDItem
라디오 단추를 사용하여 확인할 그룹의 항목을 ID 또는 오프셋 nFlags으로 지정합니다.

nFlags
nIDLast해석nIDFirst을 지정하고 nIDItem 다음과 같은 방식으로 지정합니다.

nFlags 해석
MF_BYCOMMAND 매개 변수가 기존 메뉴 항목의 명령 ID를 제공하도록 지정합니다. 둘 다 설정되지 않으면 MF_BYCOMMAND MF_BYPOSITION 기본값입니다.
MF_BYPOSITION 매개 변수가 기존 메뉴 항목의 위치를 제공하도록 지정합니다. 첫 번째 항목은 위치 0에 있습니다.

Return Value

성공하면 0이 아닌 값입니다. 그렇지 않으면 0

설명

동시에 함수는 연결된 그룹의 다른 모든 메뉴 항목을 선택 취소하고 해당 항목에 대한 라디오 항목 유형 플래그를 지웁니다. 선택한 항목은 확인 표시 비트맵 대신 라디오 단추(또는 글머리 기호) 비트맵을 사용하여 표시됩니다.

예시

ON_COMMAND_RANGE에 대한 예를 참조하세요.

CMenu::CMenu

빈 메뉴를 만들어 개체에 CMenu 연결합니다.

CMenu();

설명

다음의 만들기 또는 로드 멤버 함수 중 하나를 호출할 때까지 메뉴가 만들어지지 않습니다.CMenu

CMenu::CreateMenu

메뉴를 만들어 개체에 CMenu 연결합니다.

BOOL CreateMenu();

Return Value

메뉴가 성공적으로 만들어진 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

메뉴는 처음에 비어 있습니다. 메뉴 항목은 또는 InsertMenu 멤버 함수를 AppendMenu 사용하여 추가할 수 있습니다.

창에 메뉴가 할당되면 창이 제거되면 자동으로 제거됩니다.

종료하기 전에 메뉴가 창에 할당되지 않은 경우 애플리케이션은 메뉴와 연결된 시스템 리소스를 해제해야 합니다. 애플리케이션은 멤버 함수를 호출하여 메뉴를 해제합니다 DestroyMenu .

예시

// The code fragment below shows how to create a new menu for the
// application window using CreateMenu() and CreatePopupMenu().
// Then, the created menu will replace the current menu of the
// application. The old menu will be destroyed with DestroyMenu().
// NOTE: The code fragment below is done in a CFrameWnd-derived class.

// Create a new menu for the application window.
VERIFY(m_NewMenu.CreateMenu());

// Create a "File" popup menu and insert this popup menu to the
// new menu of the application window. The "File" menu has only
// one menu item, i.e. "Exit".
VERIFY(m_FileMenu.CreatePopupMenu());
m_FileMenu.AppendMenu(MF_STRING, ID_APP_EXIT, _T("E&xit"));
m_NewMenu.AppendMenu(MF_POPUP, (UINT_PTR)m_FileMenu.m_hMenu, _T("&File"));

// Remove and destroy old menu
SetMenu(NULL);
CMenu *old_menu = CMenu::FromHandle(m_hMenuDefault);
old_menu->DestroyMenu();

// Add new menu.
SetMenu(&m_NewMenu);

// Assign default menu
m_hMenuDefault = m_NewMenu.m_hMenu;

CMenu::CreatePopupMenu

팝업 메뉴를 만들어 개체에 CMenu 연결합니다.

BOOL CreatePopupMenu();

Return Value

팝업 메뉴가 성공적으로 만들어진 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

메뉴는 처음에 비어 있습니다. 메뉴 항목은 또는 InsertMenu 멤버 함수를 AppendMenu 사용하여 추가할 수 있습니다. 애플리케이션은 기존 메뉴 또는 팝업 메뉴에 팝업 메뉴를 추가할 수 있습니다. 멤버 함수를 TrackPopupMenu 사용하여 이 메뉴를 부동 팝업 메뉴로 표시하고 팝업 메뉴에서 선택 항목을 추적할 수 있습니다.

창에 메뉴가 할당되면 창이 제거되면 자동으로 제거됩니다. 메뉴가 기존 메뉴에 추가되면 해당 메뉴가 제거되면 자동으로 제거됩니다.

메뉴가 창에 할당되지 않은 경우 애플리케이션은 종료하기 전에 팝업 메뉴와 연결된 시스템 리소스를 해제해야 합니다. 애플리케이션은 멤버 함수를 호출하여 메뉴를 해제합니다 DestroyMenu .

예시

CMenu::CreateMenu에 대한 예를 참조하세요.

CMenu::DeleteMenu

메뉴에서 항목을 삭제합니다.

BOOL DeleteMenu(
    UINT nPosition,
    UINT nFlags);

매개 변수

nPosition
에 의해 nFlags결정된 대로 삭제할 메뉴 항목을 지정합니다.

nFlags
다음과 같은 방법으로 해석 nPosition 하는 데 사용됩니다.

nFlags 의 해석 nPosition
MF_BYCOMMAND 매개 변수가 기존 메뉴 항목의 명령 ID를 제공하도록 지정합니다. 둘 다 설정되지 않으면 MF_BYCOMMAND MF_BYPOSITION 기본값입니다.
MF_BYPOSITION 매개 변수가 기존 메뉴 항목의 위치를 제공하도록 지정합니다. 첫 번째 항목은 위치 0에 있습니다.

Return Value

함수가 성공하면 0이 아니고 그렇지 않으면 0입니다.

설명

메뉴 항목에 연결된 팝업 메뉴가 있는 경우 팝업 메뉴 DeleteMenu 에 대한 핸들을 제거하고 팝업 메뉴에서 사용하는 메모리를 해제합니다.

창에 있는 메뉴가 변경될 때마다(창이 표시되는지 여부) 애플리케이션에서 호출 CWnd::DrawMenuBar해야 합니다.

예시

CWnd::GetMenu에 대한 예를 참조하세요.

CMenu::DeleteTempMap

유휴 시간 처리기에서 CWinApp 자동으로 호출되면 멤버 함수에서 만든 임시 CMenu 개체를 FromHandle 삭제합니다.

static void PASCAL DeleteTempMap();

설명

DeleteTempMap 개체를 삭제하기 전에 임시 CMenu 개체에 연결된 Windows 메뉴 개체를 CMenu 분리합니다.

예시

// DeleteTempMap() is a static member and does not need
// an instantiated CMenu object.
CMenu::DeleteTempMap();

CMenu::DestroyMenu

메뉴 및 사용된 모든 Windows 리소스를 제거합니다.

BOOL DestroyMenu();

Return Value

메뉴가 제거되면 0이 아닙니다. 그렇지 않으면 0입니다.

설명

메뉴가 제거되기 전에 개체에서 CMenu 분리됩니다. Windows DestroyMenu 함수는 소멸자에서 CMenu 자동으로 호출됩니다.

예시

CMenu::CreateMenu에 대한 예를 참조하세요.

CMenu::Detach

개체에서 CMenu Windows 메뉴를 분리하고 핸들을 반환합니다.

HMENU Detach();

Return Value

성공하면 Windows 메뉴에 대한 형식 HMENU의 핸들입니다. 그렇지 않으면 NULL.

설명

데이터 멤버가 m_hMenu .로 설정됩니다 NULL.

예시

CMenu mnu;
HMENU hmnu = AfxGetMainWnd()->GetMenu()->GetSafeHmenu();
mnu.Attach(hmnu);

// Now you can manipulate the window's menu as a CMenu
// object...

mnu.Detach();

CMenu::DrawItem

소유자가 그린 메뉴의 시각적 측면이 변경되면 프레임워크에서 호출됩니다.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

매개 변수

lpDrawItemStruct
필요한 그리기 DRAWITEMSTRUCT 형식에 대한 정보가 들어 있는 구조체에 대한 포인터입니다.

설명

구조체의 DRAWITEMSTRUCT 멤버는 itemAction 수행할 그리기 동작을 정의합니다. 소유자 그리 CMenu 기 개체에 대한 그리기를 구현하려면 이 멤버 함수를 재정의합니다. 애플리케이션은 이 멤버 함수가 종료되기 전에 제공 lpDrawItemStruct 된 표시 컨텍스트에 대해 선택한 모든 GDI(그래픽 디바이스 인터페이스) 개체를 복원해야 합니다.

구조에 대한 설명은 참조 CWnd::OnDrawItem 하세요 DRAWITEMSTRUCT .

예시

다음 코드는 MFC CTRLTEST 샘플에서 가져옵니다.

// Override DrawItem() to implement drawing for an owner-draw CMenu object.
// CColorMenu is a CMenu-derived class.
void CColorMenu::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
   CDC *pDC = CDC::FromHandle(lpDIS->hDC);
   COLORREF cr = (COLORREF)lpDIS->itemData; // RGB in item data

   if (lpDIS->itemAction & ODA_DRAWENTIRE)
   {
      // Paint the color item in the color requested
      CBrush br(cr);
      pDC->FillRect(&lpDIS->rcItem, &br);
   }

   if ((lpDIS->itemState & ODS_SELECTED) &&
       (lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
   {
      // item has been selected - hilite frame
      COLORREF crHilite = RGB(255 - GetRValue(cr),
                              255 - GetGValue(cr), 255 - GetBValue(cr));
      CBrush br(crHilite);
      pDC->FrameRect(&lpDIS->rcItem, &br);
   }

   if (!(lpDIS->itemState & ODS_SELECTED) &&
       (lpDIS->itemAction & ODA_SELECT))
   {
      // Item has been de-selected -- remove frame
      CBrush br(cr);
      pDC->FrameRect(&lpDIS->rcItem, &br);
   }
}

CMenu::EnableMenuItem

메뉴 항목을 사용하거나 사용하지 않도록 설정하거나 흐리게 표시합니다.

UINT EnableMenuItem(
    UINT nIDEnableItem,
    UINT nEnable);

매개 변수

nIDEnableItem
에 의해 nEnable결정된 대로 사용하도록 설정할 메뉴 항목을 지정합니다. 이 매개 변수는 팝업 메뉴 항목과 표준 메뉴 항목을 지정할 수 있습니다.

nEnable
수행할 작업을 지정합니다. 이 조합은 , 또는 와 MF_ENABLED함께 MF_BYCOMMAND 또는 MF_GRAYEDMF_BYPOSITION.의 MF_DISABLED조합일 수 있습니다. 이러한 값은 C++ 비트 OR 연산자(|)를 사용하여 결합할 수 있습니다. 이러한 값에는 다음과 같은 의미가 있습니다.

  • MF_BYCOMMAND 매개 변수가 기존 메뉴 항목의 명령 ID를 제공하도록 지정합니다. 기본값입니다.

  • MF_BYPOSITION 매개 변수가 기존 메뉴 항목의 위치를 제공하도록 지정합니다. 첫 번째 항목은 위치 0에 있습니다.

  • MF_DISABLED 메뉴 항목을 선택할 수 없지만 흐리게 표시하지 않도록 메뉴 항목을 사용하지 않도록 설정합니다.

  • MF_ENABLED 메뉴 항목을 선택할 수 있도록 설정하고 흐리게 표시된 상태에서 복원합니다.

  • MF_GRAYED 메뉴 항목을 선택할 수 없도록 비활성화하고 흐리게 표시합니다.

Return Value

이전 상태(MF_DISABLED또는 MF_ENABLED) 또는 MF_GRAYED-1(유효하지 않은 경우)입니다.

설명

, InsertMenuModifyMenuLoadMenuIndirect 멤버 함수는 CreateMenu메뉴 항목의 상태(사용, 사용 안 함 또는 흐리게 표시)를 설정할 수도 있습니다.

MF_BYPOSITION 값을 사용하려면 애플리케이션에서 올바른 CMenu.를 사용해야 합니다. 메뉴 모음을 CMenu 사용하는 경우 최상위 메뉴 항목(메뉴 모음의 항목)이 영향을 받습니다. 팝업 또는 중첩된 팝업 메뉴에서 항목의 상태를 위치별로 설정하려면 애플리케이션에서 팝업 메뉴의 상태를 지정 CMenu 해야 합니다.

애플리케이션이 플래그를 지정하면 MF_BYCOMMAND Windows는 CMenu하위 항목인 모든 팝업 메뉴 항목을 확인합니다. 따라서 중복 메뉴 항목이 없으면 메뉴 모음을 CMenu 사용하는 것으로 충분합니다.

예시

// The code fragment below shows how to disable (and gray out) the
// File\New menu item.
// NOTE: m_bAutoMenuEnable is set to FALSE in the constructor of
// CMainFrame so no ON_UPDATE_COMMAND_UI or ON_COMMAND handlers are
// needed, and CMenu::EnableMenuItem() will work as expected.

CMenu *mmenu = GetMenu();
CMenu *submenu = mmenu->GetSubMenu(0);
submenu->EnableMenuItem(ID_FILE_NEW, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);

CMenu::FromHandle

메뉴에 대한 Windows 핸들이 CMenu 지정된 개체에 대한 포인터를 반환합니다.

static CMenu* PASCAL FromHandle(HMENU hMenu);

매개 변수

hMenu
메뉴에 대한 Windows 핸들입니다.

Return Value

일시적이거나 영구적일 수 있는 포인터 CMenu 입니다.

설명

개체가 CMenu Windows 메뉴 개체에 아직 연결되지 않은 경우 임시 CMenu 개체가 만들어지고 연결됩니다.

이 임시 CMenu 개체는 다음에 애플리케이션이 이벤트 루프에서 유휴 시간을 가지며, 이때 모든 임시 개체가 삭제될 때까지만 유효합니다.

예시

CMenu::CreateMenu에 대한 예를 참조하세요.

CMenu::GetDefaultItem

지정된 메뉴에서 기본 메뉴 항목을 결정합니다.

UINT GetDefaultItem(
    UINT gmdiFlags,
    BOOL fByPos = FALSE);

매개 변수

gmdiFlags
함수가 메뉴 항목을 검색하는 방법을 지정하는 값입니다. 이 매개 변수는 none, one 또는 다음 값의 조합일 수 있습니다.

의미
GMDI_GOINTOPOPUPS 기본 항목이 하위 메뉴가 열리는 항목인 경우 함수는 해당 하위 메뉴에서 재귀적으로 검색하도록 지정합니다. 하위 메뉴에 기본 항목이 없는 경우 반환 값은 하위 메뉴가 열리는 항목을 식별합니다.

기본적으로 함수는 하위 메뉴를 여는 항목인지 여부에 관계없이 지정된 메뉴의 첫 번째 기본 항목을 반환합니다.
GMDI_USEDISABLED 함수가 사용하지 않도록 설정된 경우에도 기본 항목을 반환하도록 지정합니다.

기본적으로 함수는 비활성화되거나 회색으로 표시된 항목을 건너뜁니다.

fByPos
메뉴 항목의 식별자 또는 위치를 검색할지 여부를 지정하는 값입니다. 이 매개 변수인 FALSE경우 식별자가 반환됩니다. 그렇지 않으면 위치가 반환됩니다.

Return Value

함수가 성공하면 반환 값은 메뉴 항목의 식별자 또는 위치입니다. 함수가 실패하면 반환 값은 - 1입니다.

설명

이 멤버 함수는 Windows SDK에 설명된 대로 Win32 함수 GetMenuDefaultItem의 동작을 구현합니다.

예시

CMenu::InsertMenu에 대한 예를 참조하세요.

CMenu::GetMenuContextHelpId

와 연결된 컨텍스트 도움말 ID를 검색합니다 CMenu.

DWORD GetMenuContextHelpId() const;

Return Value

컨텍스트 도움말 ID가 있는 경우 현재 연결된 CMenu 도움말 ID입니다. 그렇지 않으면 0입니다.

예시

CMenu::InsertMenu에 대한 예를 참조하세요.

CMenu::GetMenuInfo

메뉴에 대한 정보를 검색합니다.

BOOL GetMenuInfo(LPMENUINFO lpcmi) const;

매개 변수

lpcmi
메뉴에 대한 정보를 포함하는 구조체에 대한 포인터 MENUINFO 입니다.

Return Value

함수가 성공하면 반환 값은 0이 아닌 값입니다. 그렇지 않으면 반환 값이 0입니다.

설명

메뉴에 대한 정보를 검색하려면 이 함수를 호출합니다.

CMenu::GetMenuItemCount

팝업 또는 최상위 메뉴의 항목 수를 결정합니다.

UINT GetMenuItemCount() const;

Return Value

함수가 성공한 경우 메뉴의 항목 수입니다. 그렇지 않으면 -1입니다.

예시

CWnd::GetMenu에 대한 예를 참조하세요.

CMenu::GetMenuItemID

에 정의된 nPos위치에 있는 메뉴 항목의 메뉴 항목 식별자를 가져옵니다.

UINT GetMenuItemID(int nPos) const;

매개 변수

nPos
ID가 검색되는 메뉴 항목의 위치(0부터 시작)를 지정합니다.

Return Value

함수가 성공한 경우 팝업 메뉴의 지정된 항목에 대한 항목 ID입니다. 지정한 항목이 팝업 메뉴(팝업 메뉴 내의 항목과 반대)인 경우 반환 값은 -1입니다. 메뉴 항목에 SEPARATOR 해당하는 경우 nPos 반환 값은 0입니다.

예시

CMenu::InsertMenu에 대한 예를 참조하세요.

CMenu::GetMenuItemInfo

메뉴 항목에 대한 정보를 검색합니다.

BOOL GetMenuItemInfo(
    UINT uItem,
    LPMENUITEMINFO lpMenuItemInfo,
    BOOL fByPos = FALSE);

매개 변수

uItem
정보를 가져올 메뉴 항목의 식별자 또는 위치입니다. 이 매개 변수의 의미는 값에 ByPos따라 달라집니다.

lpMenuItemInfo
메뉴에 MENUITEMINFO대한 정보를 포함하는 Windows SDK에 설명된 대로 포인터입니다.

fByPos
의 의미를 지정하는 값입니다 nIDItem. 기본적으로 ByPos FALSEuItem이 메뉴 항목 식별자임을 나타내는 입니다. 설정FALSE되지 않은 경우 ByPos 메뉴 항목 위치를 나타냅니다.

Return Value

함수가 성공하면 반환 값이 0이 아닙니다. 함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 얻으려면 Windows SDK에 설명된 대로 Win32 함수 GetLastError를 사용합니다.

설명

이 멤버 함수는 Windows SDK에 설명된 대로 Win32 함수 GetMenuItemInfo의 동작을 구현합니다. MFC 구현 GetMenuItemInfo에서는 메뉴에 대한 핸들을 사용하지 않습니다.

예시

// CMainFrame::OnToggleTestMenuInfo() is a menu command handler for 
// "Toggle Info" menu item (whose resource id is ID_MENU_TOGGLEINFO). It 
// toggles the checked or unchecked state of the "Toggle Info" menu item.
// CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnToggleTestMenuItemInfo()
{
   // Get the popup menu which contains the "Toggle Info" menu item.
   CMenu* mmenu = GetMenu();
   CMenu* submenu = mmenu->GetSubMenu(4);

   // Check the state of the "Toggle Info" menu item. Check the menu item
   // if it is currently unchecked. Otherwise, uncheck the menu item
   // if it is not currently checked.
   MENUITEMINFO info;
   info.cbSize = sizeof (MENUITEMINFO); // must fill up this field
   info.fMask = MIIM_STATE;             // get the state of the menu item
   VERIFY(submenu->GetMenuItemInfo(ID_MENU_TOGGLEINFO, &info));

   if (info.fState & MF_CHECKED)
      submenu->CheckMenuItem(ID_MENU_TOGGLEINFO, MF_UNCHECKED | MF_BYCOMMAND);
   else
      submenu->CheckMenuItem(ID_MENU_TOGGLEINFO, MF_CHECKED | MF_BYCOMMAND);
}

CMenu::GetMenuState

지정한 메뉴 항목의 상태 또는 팝업 메뉴의 항목 수를 반환합니다.

UINT GetMenuState(
    UINT nID,
    UINT nFlags) const;

매개 변수

nID
에 의해 nFlags결정되는 메뉴 항목 ID를 지정합니다.

nFlags
nID특성을 지정합니다. 다음 값 중 하나일 수 있습니다.

  • MF_BYCOMMAND 매개 변수가 기존 메뉴 항목의 명령 ID를 제공하도록 지정합니다. 기본값입니다.

  • MF_BYPOSITION 매개 변수가 기존 메뉴 항목의 위치를 제공하도록 지정합니다. 첫 번째 항목은 위치 0에 있습니다.

Return Value

지정된 항목이 없는 경우의 값 0xFFFFFFFF 입니다. 팝업 메뉴를 식별하는 경우 nId 상위 바이트는 팝업 메뉴의 항목 수를 포함하고 하위 바이트에는 팝업 메뉴와 연결된 메뉴 플래그가 포함됩니다. 그렇지 않으면 반환 값은 다음 목록의 값에 대한 마스크(부울 OR)입니다(이 마스크는 식별되는 nId 메뉴 항목의 상태를 설명합니다.)

  • MF_CHECKED 항목 옆에 기본 확인 표시를 배치하는 토글 MF_UNCHECKED 역할을 합니다. 애플리케이션에서 확인 표시 비트맵(멤버 함수 참조 SetMenuItemBitmaps )을 제공하면 "확인 표시 켜기" 비트맵이 표시됩니다.

  • MF_DISABLED 메뉴 항목을 선택할 수 없지만 흐리게 표시하지 않도록 메뉴 항목을 사용하지 않도록 설정합니다.

  • MF_ENABLED 메뉴 항목을 선택할 수 있도록 설정하고 흐리게 표시된 상태에서 복원합니다. 이 상수의 값은 0입니다. 이 값을 사용할 때 애플리케이션에서 0에 대해 실패를 테스트해서는 안 됩니다.

  • MF_GRAYED 메뉴 항목을 선택할 수 없도록 비활성화하고 흐리게 표시합니다.

  • MF_MENUBARBREAK 항목을 정적 메뉴의 새 줄 또는 팝업 메뉴의 새 열에 배치합니다. 새 팝업 메뉴 열은 이전 열과 세로 구분선으로 구분됩니다.

  • MF_MENUBREAK 항목을 정적 메뉴의 새 줄 또는 팝업 메뉴의 새 열에 배치합니다. 열 사이에 구분선이 배치되지 않습니다.

  • MF_SEPARATOR 가로 구분선을 그립니다. 팝업 메뉴에서만 사용할 수 있습니다. 이 줄은 흐리게 표시하거나 사용하지 않도록 설정하거나 강조 표시할 수 없습니다. 다른 매개 변수는 무시됩니다.

  • MF_UNCHECKED 항목 옆에 있는 확인 표시를 제거하는 토글 MF_CHECKED 역할을 합니다. 애플리케이션에서 확인 표시 비트맵(멤버 함수 참조 SetMenuItemBitmaps )을 제공하면 "확인 표시 해제" 비트맵이 표시됩니다. 이 상수의 값은 0입니다. 이 값을 사용할 때 애플리케이션에서 0에 대해 실패를 테스트해서는 안 됩니다.

예시

// CMainFrame::OnToggleTestMenuState() is a menu command handler for
// "Toggle State" menu item (whose resource id is ID_MENU_TOGGLESTATE).
// It toggles the checked or unchecked state of the "Toggle State" menu item.
// CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnToggleTestMenuState()
{
   // Get the popup menu which contains the "Toggle State" menu item.
   CMenu *mmenu = GetMenu();
   CMenu *submenu = mmenu->GetSubMenu(4);

   // Check the state of the "Toggle State" menu item. Check the menu item
   // if it is currently unchecked. Otherwise, uncheck the menu item
   // if it is not currently checked.
   UINT state = submenu->GetMenuState(ID_MENU_TOGGLESTATE, MF_BYCOMMAND);
   ASSERT(state != 0xFFFFFFFF);

   if (state & MF_CHECKED)
      submenu->CheckMenuItem(ID_MENU_TOGGLESTATE, MF_UNCHECKED | MF_BYCOMMAND);
   else
      submenu->CheckMenuItem(ID_MENU_TOGGLESTATE, MF_CHECKED | MF_BYCOMMAND);
}

CMenu::GetMenuString

지정된 메뉴 항목의 레이블을 지정된 버퍼에 복사합니다.

int GetMenuString(
    UINT nIDItem,
    LPTSTR lpString,
    int nMaxCount,
    UINT nFlags) const;

int GetMenuString(
    UINT nIDItem,
    CString& rString,
    UINT nFlags) const;

매개 변수

nIDItem
의 값 nFlags에 따라 메뉴 항목의 정수 식별자 또는 메뉴 항목의 오프셋을 지정합니다.

lpString
레이블을 받을 버퍼를 가리킵니다.

rString
복사된 메뉴 문자열을 CString 받을 개체에 대한 참조입니다.

nMaxCount
복사할 레이블의 최대 길이(문자 단위)를 지정합니다. 레이블이 지정된 nMaxCount최대값보다 길면 추가 문자가 잘립니다.

nFlags
매개 변수의 해석을 nIDItem 지정합니다. 다음 값 중 하나일 수 있습니다.

nFlags 의 해석 nIDItem
MF_BYCOMMAND 매개 변수가 기존 메뉴 항목의 명령 ID를 제공하도록 지정합니다. 둘 다 설정되지 않으면 MF_BYCOMMAND MF_BYPOSITION 기본값입니다.
MF_BYPOSITION 매개 변수가 기존 메뉴 항목의 위치를 제공하도록 지정합니다. 첫 번째 항목은 위치 0에 있습니다.

Return Value

null 종결자를 포함하지 않고 버퍼에 복사된 실제 문자 수를 지정합니다.

설명

nMaxCount 문자열을 종료하는 null 문자를 수용하려면 매개 변수가 레이블의 문자 수보다 커야 합니다.

예시

CMenu::InsertMenu에 대한 예를 참조하세요.

CMenu::GetSafeHmenu

HMENUCMenu 개체 또는 NULL CMenu 포인터로 래핑된 값을 반환합니다.

HMENU GetSafeHmenu() const;

예시

CMenu::LoadMenu에 대한 예를 참조하세요.

CMenu::GetSubMenu

팝업 메뉴의 CMenu 개체를 검색합니다.

CMenu* GetSubMenu(int nPos) const;

매개 변수

nPos
메뉴에 포함된 팝업 메뉴의 위치를 지정합니다. 위치 값은 첫 번째 메뉴 항목에 대해 0부터 시작합니다. 이 함수에서는 팝업 메뉴의 식별자를 사용할 수 없습니다.

Return Value

팝업 메뉴가 m_hMenu 지정된 위치에 있는 경우 멤버가 팝업 메뉴에 대한 핸들을 포함하는 개체에 대한 포인터 CMenu 입니다. 그렇지 않으면 NULL. 개체가 CMenu 없으면 임시 개체가 만들어집니다. 반환된 포인터는 CMenu 저장하면 안 됩니다.

예시

CMenu::TrackPopupMenu에 대한 예를 참조하세요.

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에 있습니다. -1이면 nPosition 메뉴 끝에 새 메뉴 항목이 추가됩니다.

nFlags
해석 방법을 nPosition 지정하고 메뉴에 추가할 때 새 메뉴 항목의 상태에 대한 정보를 지정합니다. 설정할 수 있는 플래그 목록은 멤버 함수를 AppendMenu 참조하세요. 둘 이상의 값을 지정하려면 비트 OR 연산자를 사용하여 해당 값을 또는 MF_BYPOSITION 플래그와 MF_BYCOMMAND 결합합니다.

nIDNewItem
새 메뉴 항목의 명령 ID 또는 nFlags 팝업 메뉴의 메뉴 핸들(HMENU)을 MF_POPUP지정합니다. nIDNewItem 로 설정된 MF_SEPARATOR경우 nFlags 매개 변수가 무시됩니다(필요하지 않음).

lpszNewItem
새 메뉴 항목의 내용을 지정합니다. nFlags 은 다음과 같은 방법으로 해석 lpszNewItem 하는 데 사용할 수 있습니다.

nFlags 의 해석 lpszNewItem
MF_OWNERDRAW 애플리케이션이 메뉴 항목과 연결된 추가 데이터를 유지하는 데 사용할 수 있는 애플리케이션 제공 32비트 값을 포함합니다. 이 32비트 값은 애플리케이션에서 제공된 WM_MEASUREITEM 구조체의 멤버 및 WM_DRAWITEM 메시지에서 itemData 사용할 수 있습니다. 이러한 메시지는 메뉴 항목이 처음 표시되거나 변경될 때 전송됩니다.
MF_STRING null로 끝나는 문자열에 대한 긴 포인터를 포함합니다. 이것이 기본 해석입니다.
MF_SEPARATOR lpszNewItem 매개 변수는 무시됩니다(필요하지 않음).

pBmp
CBitmap 메뉴 항목으로 사용할 개체를 가리킵니다.

Return Value

함수가 성공하면 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;
}

CMenu::InsertMenuItem

메뉴의 지정된 위치에 새 메뉴 항목을 삽입합니다.

BOOL InsertMenuItem(
    UINT uItem,
    LPMENUITEMINFO lpMenuItemInfo,
    BOOL fByPos = FALSE);

매개 변수

uItem
Windows SDK에서의 설명을 uItem InsertMenuItem 참조하세요.

lpMenuItemInfo
Windows SDK에서의 설명을 lpmii InsertMenuItem 참조하세요.

fByPos
Windows SDK에서의 설명을 fByPosition InsertMenuItem 참조하세요.

설명

이 함수는 InsertMenuItemWindows SDK에 설명된 래핑됩니다.

CMenu::LoadMenu

애플리케이션의 실행 파일에서 메뉴 리소스를 로드하고 개체에 CMenu 연결합니다.

BOOL LoadMenu(LPCTSTR lpszResourceName);
BOOL LoadMenu(UINT nIDResource);

매개 변수

lpszResourceName
로드할 메뉴 리소스의 이름을 포함하는 null로 끝나는 문자열을 가리킵니다.

nIDResource
로드할 메뉴 리소스의 메뉴 ID를 지정합니다.

Return Value

메뉴 리소스가 성공적으로 로드된 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

종료하기 전에 메뉴가 창에 할당되지 않은 경우 애플리케이션은 메뉴와 연결된 시스템 리소스를 해제해야 합니다. 애플리케이션은 멤버 함수를 호출하여 메뉴를 해제합니다 DestroyMenu .

예시

// CMainFrame::OnReplaceMenu() is a menu command handler for CMainFrame
// class, which in turn is a CFrameWnd-derived class. It loads a new
// menu resource and replaces the SDI application window's menu bar with
// this new menu. CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnReplaceMenu()
{
   // Load the new menu.
   m_ShortMenu.LoadMenu(IDR_SHORT_MENU);
   ASSERT(m_ShortMenu);

   // Remove and destroy the old menu
   SetMenu(NULL);
   ::DestroyMenu(m_hMenuDefault);

   // Add the new menu
   SetMenu(&m_ShortMenu);

   // Assign default menu
   m_hMenuDefault = m_ShortMenu.GetSafeHmenu(); // or m_ShortMenu.m_hMenu;
}

CMenu::LoadMenuIndirect

메모리의 메뉴 템플릿에서 리소스를 로드하고 개체에 CMenu 연결합니다.

BOOL LoadMenuIndirect(const void* lpMenuTemplate);

매개 변수

lpMenuTemplate
메뉴 템플릿(단일 MENUITEMTEMPLATEHEADER 구조체 및 하나 이상의 MENUITEMTEMPLATE 구조체 컬렉션)을 가리킵니다. 이러한 두 구조에 대한 자세한 내용은 Windows SDK를 참조하세요.

Return Value

메뉴 리소스가 성공적으로 로드된 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

메뉴 템플릿은 머리글 뒤에 하나 이상의 MENUITEMTEMPLATE 구조체 컬렉션이 있으며, 각각에는 하나 이상의 메뉴 항목과 팝업 메뉴가 포함될 수 있습니다.

버전 번호는 0이어야 합니다.

플래그는 mtOption 팝업 목록의 마지막 항목과 주 목록의 마지막 항목에 대해 포함 MF_END 해야 합니다. 다른 플래그는 AppendMenu 멤버 함수를 참조하세요. mtId 에 지정된 mtOption경우 MF_POPUP 구조체에서 멤버를 MENUITEMTEMPLATE 생략해야 합니다.

구조체에 MENUITEMTEMPLATE 할당된 공간은 메뉴 항목의 이름을 null로 끝나는 문자열로 포함할 수 있을 만큼 충분히 mtString 커야 합니다.

종료하기 전에 메뉴가 창에 할당되지 않은 경우 애플리케이션은 메뉴와 연결된 시스템 리소스를 해제해야 합니다. 애플리케이션은 멤버 함수를 호출하여 메뉴를 해제합니다 DestroyMenu .

예시

// CMainFrame::OnLoadMenuIndirect() is a menu command handler for
// CMainFrame class, which in turn is a CFrameWnd-derived class. It
// shows how to use LoadMenuIndirect() to load a resource from a
// menu template in memory.
void CMainFrame::OnLoadMenuIndirect()
{
   // For simplicity, allocate 500 bytes from stack. May use
   // GlobalAlloc() to allocate memory bytes from heap.
   BYTE milist[500];
   memset(milist, 0, 500);
   int bytes_left = sizeof(milist);

   // Fill up the MENUITEMTEMPLATEHEADER structure.
   MENUITEMTEMPLATEHEADER *mheader = (MENUITEMTEMPLATEHEADER*)milist;
   mheader->versionNumber = 0;
   mheader->offset = 0;

   int bytes_used = sizeof(MENUITEMTEMPLATEHEADER);
   bytes_left -= bytes_used;

   // Add the following menu items to menu bar:
   // File     Edit
   //   Exit     Copy
   //            Paste
   bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"&File", 0,
                             TRUE, FALSE);
   bytes_left -= bytes_used;
   bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"E&xit",
                             ID_APP_EXIT, FALSE, TRUE);
   bytes_left -= bytes_used;
   bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"&Edit", 0,
                             TRUE, TRUE);
   bytes_left -= bytes_used;
   bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"&Copy",
                             ID_EDIT_COPY, FALSE, FALSE);
   bytes_left -= bytes_used;
   bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"&Paste",
                             ID_EDIT_PASTE, FALSE, TRUE);
   bytes_left -= bytes_used;

   // Load resource from a menu template in memory.
   ASSERT(m_IndiMenu.LoadMenuIndirect(milist));

   // Remove and destroy old menu
   SetMenu(NULL);
   ::DestroyMenu(m_hMenuDefault);

   // Add new menu.
   SetMenu(&m_IndiMenu);

   // Assign default menu
   m_hMenuDefault = m_IndiMenu.m_hMenu;
}

// This is a helper function for adding a menu item (either a popup
// or command item) to the specified menu template.
//
//    MenuTemplate  - pointer to a menu template
//    TemplateBytes - space remaining in MenuTemplate
//    MenuString    - string for the menu item to be added
//    MenuID        - id for the command item. Its value is ignored if
//                    IsPopup is TRUE.
//    IsPopup       - TRUE for popup menu (or submenu); FALSE for command
//                    item
//    LastItem      - TRUE if MenuString is the last item for the popup;
//                    FALSE otherwise.
UINT AddMenuItem(LPVOID MenuTemplate, int TemplateBytes, WCHAR *MenuString,
                 WORD MenuID, BOOL IsPopup, BOOL LastItem)
{
   MENUITEMTEMPLATE *mitem = (MENUITEMTEMPLATE*)MenuTemplate;

   UINT bytes_used = 0;
   if (IsPopup) // for popup menu
   {
      if (LastItem)
         mitem->mtOption = MF_POPUP | MF_END;
      else
         mitem->mtOption = MF_POPUP;
      bytes_used += sizeof(mitem->mtOption);

      mitem = (MENUITEMTEMPLATE*)((BYTE*)MenuTemplate + bytes_used);
      // a popup doesn't have mtID!!!

      TemplateBytes -= bytes_used;
      wcscpy_s((WCHAR*)mitem, TemplateBytes / sizeof(WCHAR), MenuString);
      bytes_used += (UINT)(sizeof(WCHAR) * (wcslen(MenuString) + 1)); // include '\0'
   }
   else // for command item
   {
      mitem->mtOption = LastItem ? MF_END : 0;
      mitem->mtID = MenuID;
      TemplateBytes -= bytes_used;
      wcscpy_s(mitem->mtString, TemplateBytes / sizeof(WCHAR), MenuString);
      bytes_used += (UINT)(sizeof(mitem->mtOption) + sizeof(mitem->mtID) +
                           sizeof(WCHAR) * (wcslen(MenuString) + 1)); // include '\0'
   }

   return bytes_used;
}

CMenu::m_hMenu

개체에 HMENU 연결된 Windows 메뉴의 핸들을 CMenu 지정합니다.

HMENU m_hMenu;

예시

CMenu::LoadMenu에 대한 예를 참조하세요.

CMenu::MeasureItem

소유자 그리기 스타일이 있는 메뉴를 만들 때 프레임워크에서 호출됩니다.

virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

매개 변수

lpMeasureItemStruct
구조체에 대한 포인터입니다 MEASUREITEMSTRUCT .

설명

기본적으로 이 멤버 함수는 아무 작업도 수행하지 않습니다. 이 멤버 함수를 재정의하고 구조를 입력 MEASUREITEMSTRUCT 하여 Windows에 메뉴의 크기를 알립니다.

구조에 대한 설명은 참조 CWnd::OnMeasureItem 하세요 MEASUREITEMSTRUCT .

예시

다음 코드는 MFC CTRLTEST 샘플에서 가져옵니다.

// Override MeasureItem() to return the size of the menu item.
// CColorMenu is a CMenu-derived class.

#define COLOR_BOX_WIDTH 20
#define COLOR_BOX_HEIGHT 20

void CColorMenu::MeasureItem(LPMEASUREITEMSTRUCT lpMIS)
{
   // all items are of fixed size
   lpMIS->itemWidth = COLOR_BOX_WIDTH;
   lpMIS->itemHeight = COLOR_BOX_HEIGHT;
}

CMenu::ModifyMenu

로 지정된 nPosition위치에서 기존 메뉴 항목을 변경합니다.

BOOL ModifyMenu(
    UINT nPosition,
    UINT nFlags,
    UINT_PTR nIDNewItem = 0,
    LPCTSTR lpszNewItem = NULL);

BOOL ModifyMenu(
    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에 있습니다.

nFlags
해석 방법을 nPosition 지정하고 메뉴 항목의 변경 내용에 대한 정보를 제공합니다. 설정할 수 있는 플래그 목록은 멤버 함수를 AppendMenu 참조하세요.

nIDNewItem
수정된 메뉴 항목의 명령 ID 또는 nFlags 팝업 메뉴의 메뉴 핸들(HMENU)을 MF_POPUP지정합니다. nIDNewItem 로 설정된 MF_SEPARATOR경우 nFlags 매개 변수가 무시됩니다(필요하지 않음).

lpszNewItem
새 메뉴 항목의 내용을 지정합니다. 매개 변수는 nFlags 다음과 같은 방법으로 해석 lpszNewItem 하는 데 사용할 수 있습니다.

nFlags 의 해석 lpszNewItem
MF_OWNERDRAW 애플리케이션이 메뉴 항목과 연결된 추가 데이터를 유지하는 데 사용할 수 있는 애플리케이션 제공 32비트 값을 포함합니다. 이 32비트 값은 애플리케이션이 처리 MF_MEASUREITEM 할 때 사용할 수 있습니다 MF_DRAWITEM.
MF_STRING null로 끝나는 문자열 또는 에 대한 긴 포인터를 CString포함합니다.
MF_SEPARATOR lpszNewItem 매개 변수는 무시됩니다(필요하지 않음).

pBmp
CBitmap 메뉴 항목으로 사용할 개체를 가리킵니다.

Return Value

함수가 성공하면 0이 아니고 그렇지 않으면 0입니다.

설명

애플리케이션에서 값을 설정하여 메뉴 항목의 새 상태를 지정합니다 nFlags. 이 함수는 메뉴 항목과 연결된 팝업 메뉴를 대체하는 경우 이전 팝업 메뉴를 삭제하고 팝업 메뉴에서 사용하는 메모리를 해제합니다.

nIDNewItem 팝업 메뉴를 지정하면 팝업 메뉴가 삽입되는 메뉴의 일부가 됩니다. 해당 메뉴가 제거되면 삽입된 메뉴도 제거됩니다. 충돌을 방지하려면 삽입된 메뉴를 개체에서 CMenu 분리해야 합니다.

창에 있는 메뉴가 변경될 때마다(창이 표시되는지 여부) 애플리케이션에서 호출 CWnd::DrawMenuBar해야 합니다. 기존 메뉴 항목의 특성을 변경하려면 멤버 함수 및 EnableMenuItem 멤버 함수를 CheckMenuItem 사용하는 것이 훨씬 빠릅니다.

예시

CMenu::InsertMenu에 대한 예를 참조하세요.

CMenu::operator HMENU

이 연산자를 사용하여 개체의 핸들을 검색합니다 CMenu .

operator HMENU() const;

Return Value

성공하면 개체의 핸들이 CMenu 고, NULL그렇지 않으면 .

설명

핸들을 사용하여 Windows API를 직접 호출할 수 있습니다.

CMenu::operator !=

두 메뉴가 논리적으로 같지 않은지 여부를 확인합니다.

BOOL operator!=(const CMenu& menu) const;

매개 변수

menu
비교를 위한 CMenu 개체입니다.

설명

왼쪽의 메뉴 개체가 오른쪽의 메뉴 개체와 같지 않은지 테스트합니다.

CMenu::operator ==

두 메뉴가 논리적으로 같은지 여부를 확인합니다.

BOOL operator==(const CMenu& menu) const;

매개 변수

menu
비교를 위한 CMenu 개체입니다.

설명

왼쪽의 메뉴 개체가 오른쪽의 메뉴 개체와 같은지 테스트합니다(값 측면에서 HMENU ).

CMenu::RemoveMenu

메뉴에서 연결된 팝업 메뉴가 있는 메뉴 항목을 삭제합니다.

BOOL RemoveMenu(
    UINT nPosition,
    UINT nFlags);

매개 변수

nPosition
제거할 메뉴 항목을 지정합니다. 매개 변수는 nFlags 다음과 같은 방법으로 해석 nPosition 하는 데 사용할 수 있습니다.

nFlags 의 해석 nPosition
MF_BYCOMMAND 매개 변수가 기존 메뉴 항목의 명령 ID를 제공하도록 지정합니다. 둘 다 설정되지 않으면 MF_BYCOMMAND MF_BYPOSITION 기본값입니다.
MF_BYPOSITION 매개 변수가 기존 메뉴 항목의 위치를 제공하도록 지정합니다. 첫 번째 항목은 위치 0에 있습니다.

nFlags
해석 방법을 nPosition 지정합니다.

Return Value

함수가 성공하면 0이 아니고 그렇지 않으면 0입니다.

설명

팝업 메뉴의 핸들은 삭제되지 않으므로 메뉴를 다시 사용할 수 있습니다. 이 함수를 호출하기 전에 애플리케이션은 멤버 함수를 GetSubMenu 호출하여 다시 사용할 팝업 CMenu 개체를 검색할 수 있습니다.

창에 있는 메뉴가 변경될 때마다(창이 표시되는지 여부) 애플리케이션에서 호출 CWnd::DrawMenuBar해야 합니다.

예시

CMenu::InsertMenu에 대한 예를 참조하세요.

CMenu::SetDefaultItem

지정된 메뉴의 기본 메뉴 항목을 설정합니다.

BOOL SetDefaultItem(
    UINT uItem,
    BOOL fByPos = FALSE);

매개 변수

uItem
새 기본 메뉴 항목의 식별자 또는 위치 또는 기본 항목이 없는 경우 - 1입니다. 이 매개 변수의 의미는 값에 fByPos따라 달라집니다.

fByPos
의 의미를 지정하는 값입니다 uItem. 이 매개 변수인 FALSEuItem 경우 메뉴 항목 식별자입니다. 그렇지 않으면 메뉴 항목 위치입니다.

Return Value

함수가 성공하면 반환 값이 0이 아닙니다. 함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 얻으려면 Windows SDK에 설명된 대로 Win32 함수 GetLastError를 사용합니다.

설명

이 멤버 함수는 Windows SDK에 설명된 대로 Win32 함수 SetMenuDefaultItem의 동작을 구현합니다.

예시

CMenu::InsertMenu에 대한 예를 참조하세요.

CMenu::SetMenuContextHelpId

컨텍스트 도움말 ID를 .와 연결 CMenu합니다.

BOOL SetMenuContextHelpId(DWORD dwContextHelpId);

매개 변수

dwContextHelpId
연결할 컨텍스트 도움말 ID입니다 CMenu.

Return Value

성공하면 0이 아닌 값입니다. 그렇지 않으면 0

설명

메뉴의 모든 항목은 이 식별자를 공유합니다. 도움말 컨텍스트 식별자를 개별 메뉴 항목에 연결할 수 없습니다.

예시

CMenu::InsertMenu에 대한 예를 참조하세요.

CMenu::SetMenuInfo

메뉴에 대한 정보를 설정합니다.

BOOL SetMenuInfo(LPCMENUINFO lpcmi);

매개 변수

lpcmi
메뉴에 대한 정보를 포함하는 구조체에 대한 포인터 MENUINFO 입니다.

Return Value

함수가 성공하면 반환 값은 0이 아닌 값입니다. 그렇지 않으면 반환 값이 0입니다.

설명

메뉴에 대한 특정 정보를 설정하려면 이 함수를 호출합니다.

CMenu::SetMenuItemBitmaps

지정된 비트맵을 메뉴 항목과 연결합니다.

BOOL SetMenuItemBitmaps(
    UINT nPosition,
    UINT nFlags,
    const CBitmap* pBmpUnchecked,
    const CBitmap* pBmpChecked);

매개 변수

nPosition
변경할 메뉴 항목을 지정합니다. 매개 변수는 nFlags 다음과 같은 방법으로 해석 nPosition 하는 데 사용할 수 있습니다.

nFlags nPosition 해석
MF_BYCOMMAND 매개 변수가 기존 메뉴 항목의 명령 ID를 제공하도록 지정합니다. 둘 다 설정되지 않으면 MF_BYCOMMAND MF_BYPOSITION 기본값입니다.
MF_BYPOSITION 매개 변수가 기존 메뉴 항목의 위치를 제공하도록 지정합니다. 첫 번째 항목은 위치 0에 있습니다.

nFlags
해석 방법을 nPosition 지정합니다.

pBmpUnchecked
선택하지 않은 메뉴 항목에 사용할 비트맵을 지정합니다.

pBmpChecked
선택된 메뉴 항목에 사용할 비트맵을 지정합니다.

Return Value

함수가 성공하면 0이 아니고 그렇지 않으면 0입니다.

설명

메뉴 항목을 선택하거나 선택 취소하든 관계없이 Windows는 메뉴 항목 옆에 적절한 비트맵을 표시합니다.

둘 중 하나 pBmpUnchecked 또는 pBmpChecked 인 경우 Windows는 NULL해당 특성에 대한 메뉴 항목 옆에 아무 것도 표시하지 않습니다. 두 매개 변수가 모두 있는 경우 Windows는 NULL항목을 확인할 때 기본 확인 표시를 사용하고 항목이 선택 취소되면 확인 표시를 제거합니다.

메뉴가 제거되면 이러한 비트맵은 제거되지 않습니다. 애플리케이션은 삭제해야 합니다.

Windows GetMenuCheckMarkDimensions 함수는 메뉴 항목에 사용되는 기본 확인 표시의 크기를 검색합니다. 애플리케이션은 이러한 값을 사용하여 이 함수와 함께 제공되는 비트맵에 적합한 크기를 결정합니다. 크기를 가져와서 비트맵을 만든 다음 설정합니다.

예시

// The code fragment below is from CMainFrame::OnCreate and shows
// how to associate bitmaps with the "Bitmap" menu item.
// Whether the "Bitmap" menu item is checked or unchecked, Windows
// displays the appropriate bitmap next to the menu item. Both
// IDB_CHECKBITMAP and IDB_UNCHECKBITMAP bitmaps are loaded
// in OnCreate() and destroyed in the destructor of CMainFrame class.
// CMainFrame is a CFrameWnd-derived class.

// Load bitmaps from resource. Both m_CheckBitmap and m_UnCheckBitmap
// are member variables of CMainFrame class of type CBitmap.
ASSERT(m_CheckBitmap.LoadBitmap(IDB_CHECKBITMAP));
ASSERT(m_UnCheckBitmap.LoadBitmap(IDB_UNCHECKBITMAP));

// Associate bitmaps with the "Bitmap" menu item.
CMenu *mmenu = GetMenu();
CMenu *submenu = mmenu->GetSubMenu(4);
ASSERT(submenu->SetMenuItemBitmaps(ID_MENU_BITMAP, MF_BYCOMMAND,
                                   &m_CheckBitmap, &m_UnCheckBitmap));

 

// This code fragment is taken from CMainFrame::~CMainFrame

// Destroy the bitmap objects if they are loaded successfully
// in OnCreate().
if (m_CheckBitmap.m_hObject)
   m_CheckBitmap.DeleteObject();

if (m_UnCheckBitmap.m_hObject)
   m_UnCheckBitmap.DeleteObject();

CMenu::SetMenuItemInfo

메뉴 항목에 대한 정보를 변경합니다.

BOOL SetMenuItemInfo(
    UINT uItem,
    LPMENUITEMINFO lpMenuItemInfo,
    BOOL fByPos = FALSE);

매개 변수

uItem
Windows SDK에서의 설명을 uItem SetMenuItemInfo 참조하세요.

lpMenuItemInfo
Windows SDK에서의 설명을 lpmii SetMenuItemInfo 참조하세요.

fByPos
Windows SDK에서의 설명을 fByPosition SetMenuItemInfo 참조하세요.

설명

이 함수는 SetMenuItemInfoWindows SDK에 설명된 래핑됩니다.

CMenu::TrackPopupMenu

지정된 위치에 부동 팝업 메뉴를 표시하고 팝업 메뉴에서 항목 선택을 추적합니다.

BOOL TrackPopupMenu(
    UINT nFlags,
    int x,
    int y,
    CWnd* pWnd,
    LPCRECT lpRect = 0);

매개 변수

nFlags
화면 위치 및 마우스 위치 플래그를 지정합니다. 사용 가능한 플래그 목록을 참조 TrackPopupMenu 하세요.

x
팝업 메뉴의 화면 좌표에서 가로 위치를 지정합니다. 매개 변수의 nFlags 값에 따라 메뉴는 왼쪽 맞춤, 오른쪽 맞춤 또는 이 위치를 기준으로 가운데 맞춤될 수 있습니다.

y
화면 메뉴 위쪽의 화면 좌표에서 세로 위치를 지정합니다.

pWnd
팝업 메뉴를 소유하는 창을 식별합니다. 플래그가 지정된 경우에도 이 매개 변수를 TPM_NONOTIFY 사용할 NULL수 없습니다. 이 창은 메뉴에서 모든 WM_COMMAND 메시지를 받습니다. Windows 버전 3.1 이상에서는 반환될 때까지 TrackPopupMenu 창에서 메시지를 수신 WM_COMMAND 하지 않습니다. Windows 3.0에서 창은 반환하기 전에 TrackPopupMenu 메시지를 받습니다WM_COMMAND.

lpRect
무시됩니다.

Return Value

이 메서드는 Windows SDK에서 호출 TrackPopupMenu 한 결과를 반환합니다.

설명

화면의 아무 곳에나 부동 팝업 메뉴가 나타날 수 있습니다.

예시

// The code fragment shows how to get the File menu from the
// application window and displays it as a floating popup menu
// when the right mouse button is clicked in view.
// CMdiView is a CView-derived class.
void CMdiView::OnRButtonDown(UINT nFlags, CPoint point)
{
   CView::OnRButtonDown(nFlags, point);

   CMenu *menu_bar = AfxGetMainWnd()->GetMenu();
   CMenu *file_menu = menu_bar->GetSubMenu(0);
   ASSERT(file_menu);

   ClientToScreen(&point);
   file_menu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x,
                             point.y, this);
}

CMenu::TrackPopupMenuEx

지정된 위치에 부동 팝업 메뉴를 표시하고 팝업 메뉴에서 항목 선택을 추적합니다.

BOOL TrackPopupMenuEx(
    UINT fuFlags,
    int x,
    int y,
    CWnd* pWnd,
    LPTPMPARAMS lptpm);

매개 변수

fuFlags
확장 메뉴에 대한 다양한 함수를 지정합니다. 모든 값과 해당 의미의 목록은 다음을 참조하세요 TrackPopupMenuEx.

x
팝업 메뉴의 화면 좌표에서 가로 위치를 지정합니다.

y
화면 메뉴 위쪽의 화면 좌표에서 세로 위치를 지정합니다.

pWnd
팝업 메뉴를 소유하고 만든 메뉴에서 메시지를 수신하는 창에 대한 포인터입니다. 이 창은 현재 애플리케이션의 모든 창일 수 NULL있지만 . 매개 변수에서 fuFlags 지정 TPM_NONOTIFY 하는 경우 함수는 메시지를 .에 pWnd보내지 않습니다. 메시지를 받으 WM_COMMAND 려면 함수가 가리키는 pWnd 창에 대해 반환해야 합니다.

lptpm
메뉴가 TPMPARAMS 겹치지 않아야 하는 화면 영역을 지정하는 구조체에 대한 포인터입니다. 이 매개 변수는 NULL일 수 있습니다.

Return Value

매개 변수에서 fuFlags 지정 TPM_RETURNCMD 하는 경우 반환 값은 사용자가 선택한 항목의 메뉴 항목 식별자입니다. 사용자가 선택하지 않고 메뉴를 취소하거나 오류가 발생하면 반환 값은 0입니다.

매개 변수에 fuFlags 지정 TPM_RETURNCMD 하지 않으면 함수가 성공하면 반환 값이 0이 아니고 실패할 경우 0이 됩니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

화면의 아무 곳에나 부동 팝업 메뉴가 나타날 수 있습니다. 팝업 메뉴를 만들 때 오류 처리에 대한 자세한 내용은 다음을 참조하세요 TrackPopupMenuEx.

참고 항목

MFC 샘플 CTRLTEST
MFC 샘플 DYNAMENU
CObject 클래스
계층 구조 차트