CContextMenuManager 클래스
개체는 CContextMenuManager
바로 가기 메뉴(상황에 맞는 메뉴라고도 함)를 관리합니다.
구문
class CContextMenuManager : public CObject
멤버
공용 생성자
속성 | 설명 |
---|---|
CContextMenuManager::CContextMenuManager | CContextMenuManager 개체를 생성합니다. |
CContextMenuManager::~CContextMenuManager |
소멸자 |
공용 메서드
이름 | 설명 |
---|---|
CContextMenuManager::AddMenu | 새 바로 가기 메뉴를 추가합니다. |
CContextMenuManager::GetMenuById | 제공된 리소스 ID와 연결된 메뉴에 대한 핸들을 반환합니다. |
CContextMenuManager::GetMenuByName | 제공된 메뉴 이름과 일치하는 메뉴에 대한 핸들을 반환합니다. |
CContextMenuManager::GetMenuNames | 메뉴 이름 목록을 반환합니다. |
CContextMenuManager::LoadState | Windows 레지스트리에 저장된 바로 가기 메뉴를 로드합니다. |
CContextMenuManager::ResetState | 상황에 맞는 메뉴 관리자에서 바로 가기 메뉴를 지웁니다. |
CContextMenuManager::SaveState | 바로 가기 메뉴를 Windows 레지스트리에 저장합니다. |
CContextMenuManager::SetDontCloseActiveMenu | 새 바로 가기 메뉴가 CContextMenuManager 표시되면 활성 바로 가기 메뉴를 닫을지 여부를 제어합니다. |
CContextMenuManager::ShowPopupMenu | 지정된 바로 가기 메뉴를 표시합니다. |
CContextMenuManager::TrackPopupMenu | 지정된 바로 가기 메뉴를 표시합니다. 선택한 메뉴 명령의 인덱스 값을 반환합니다. |
설명
CContextMenuManager
은 바로 가기 메뉴를 관리하고 일관된 모양을 갖도록 합니다.
개체를 CContextMenuManager
수동으로 만들면 안 됩니다. 애플리케이션의 프레임워크는 개체를 CContextMenuManager
만듭니다. 그러나 애플리케이션이 초기화되면 CWinAppEx::InitContextMenuManager를 호출해야 합니다. 컨텍스트 관리자를 초기화한 후 CWinAppEx::GetContextMenuManager 메서드를 사용하여 애플리케이션의 컨텍스트 관리자에 대한 포인터를 가져옵니다.
를 호출 AddMenu
하여 런타임에 바로 가기 메뉴를 만들 수 있습니다. 먼저 사용자 입력을 받지 않고 메뉴를 표시하려면 다음을 호출합니다 ShowPopupMenu
. TrackPopupMenu
는 메뉴를 만들고 사용자 입력을 기다리려는 경우에 사용됩니다. TrackPopupMenu
는 선택한 명령의 인덱스 또는 사용자가 아무 것도 선택하지 않고 종료한 경우 0을 반환합니다.
CContextMenuManager
또한 상태를 저장하고 Windows 레지스트리에 로드할 수 있습니다.
예시
다음 예제에서는 개체에 CContextMenuManager
메뉴를 추가하는 방법과 개체에 새 팝업 메뉴가 표시되면 활성 팝업 메뉴를 CContextMenuManager
닫지 않는 방법을 보여 줍니다. 이 코드 조각은 사용자 지정 페이지 샘플의 일부입니다.
// The GetContextMenuManager method is inherited from the CWinAppEx class.
GetContextMenuManager()->AddMenu(_T("My menu"), IDR_CONTEXT_MENU);
GetContextMenuManager()->SetDontCloseActiveMenu(true);
상속 계층 구조
CContextMenuManager
요구 사항
헤더: afxcontextmenumanager.h
CContextMenuManager::AddMenu
CContextMenuManager에 새 바로 가기 메뉴를 추가합니다.
BOOL AddMenu(
UINT uiMenuNameResId,
UINT uiMenuResId);
BOOL AddMenu(
LPCTSTR lpszName,
UINT uiMenuResId);
매개 변수
uiMenuNameResId
[in] 새 메뉴의 이름을 포함하는 문자열의 리소스 ID입니다.
uiMenuResId
[in] 메뉴 리소스 ID입니다.
lpszName
[in] 새 메뉴의 이름을 포함하는 문자열입니다.
Return Value
메서드가 성공한 경우 0이 아닌 경우 메서드가 실패하면 0입니다.
설명
uiMenuResId가 잘못되었거나 이름이 같은 다른 메뉴가 이미 있는 CContextMenuManager
경우 이 메서드가 실패합니다.
CContextMenuManager::CContextMenuManager
CContextMenuManager 개체를 생성합니다.
CContextMenuManager();
설명
대부분의 경우 수동으로 만들 CContextMenuManager
면 안 됩니다. 애플리케이션의 프레임워크는 개체를 CContextMenuManager
만듭니다. 애플리케이션을 초기화하는 동안 CWinAppEx::InitContextMenuManager를 호출해야 합니다. 컨텍스트 관리자에 대한 포인터를 얻으려면 CWinAppEx::GetContextMenuManager를 호출합니다.
CContextMenuManager::GetMenuById
지정된 리소스 ID와 연결된 메뉴에 대한 핸들을 반환합니다.
HMENU GetMenuById(UINT nMenuResId) const;
매개 변수
nMenuResId
[in] 메뉴의 리소스 ID입니다.
Return Value
연결된 메뉴에 대한 핸들이거나 NULL
메뉴를 찾을 수 없는 경우
CContextMenuManager::GetMenuByName
특정 메뉴에 대한 핸들을 반환합니다.
HMENU GetMenuByName(
LPCTSTR lpszName,
UINT* puiOrigResID = NULL) const;
매개 변수
lpszName
[in] 검색할 메뉴의 이름을 포함하는 문자열입니다.
puiOrigResID
[out] UINT에 대한 포인터입니다. 이 매개 변수는 지정된 메뉴의 리소스 ID(있는 경우)를 포함합니다.
Return Value
lpszName에서 지정한 이름과 일치하는 메뉴에 대한 핸들입니다. lpszName이라는 메뉴가 없으면 NULL입니다.
설명
이 메서드가 lpszNameGetMenuByName
과 일치하는 메뉴를 찾으면 메뉴 리소스 ID를 puiOrigResID 매개 변수에 저장합니다.
CContextMenuManager::GetMenuNames
CContextMenuManager에 추가된 메뉴 이름 목록을 반환합니다.
void GetMenuNames(CStringList& listOfNames) const;
매개 변수
listOfNames
[out] CStringList 매개 변수에 대한 참조입니다 . 이 메서드는 메뉴 이름 목록을 이 매개 변수에 씁니다.
CContextMenuManager::LoadState
Windows 레지스트리에서 CContextMenuManager 클래스와 연결된 정보를 로드합니다.
virtual BOOL LoadState(LPCTSTR lpszProfileName = NULL);
매개 변수
lpszProfileName
[in] 레지스트리 키의 상대 경로를 포함하는 문자열입니다.
Return Value
메서드가 성공하면 0이 아닌 경우 그렇지 않으면 0입니다.
설명
lpszProfileName 매개 변수는 레지스트리 항목의 절대 경로가 아닙니다. 애플리케이션의 기본 레지스트리 키 끝에 추가되는 상대 경로입니다. 기본 레지스트리 키를 얻거나 설정하려면 CWinAppEx::GetRegistryBase 및 CWinAppEx::SetRegistryBase 메서드를 각각 사용합니다.
CContextMenuManager::SaveState 메서드를 사용하여 바로 가기 메뉴를 레지스트리에 저장합니다.
CContextMenuManager::ResetState
CContextMenuManager 클래스와 연결된 바로 가기 메뉴에서 모든 항목을 지웁니다.
virtual BOOL ResetState();
Return Value
메서드가 성공하면 TRUE입니다. 오류가 발생하면 FALSE입니다.
설명
이 메서드는 팝업 메뉴를 지우고 에서 CContextMenuManager
제거합니다.
CContextMenuManager::SaveState
CContextMenuManager 클래스와 연결된 정보를 Windows 레지스트리에 저장합니다.
virtual BOOL SaveState(LPCTSTR lpszProfileName = NULL);
매개 변수
lpszProfileName
[in] 레지스트리 키의 상대 경로를 포함하는 문자열입니다.
Return Value
메서드가 성공하면 0이 아닌 경우 그렇지 않으면 0입니다.
설명
lpszProfileName 매개 변수는 레지스트리 항목의 절대 경로가 아닙니다. 애플리케이션의 기본 레지스트리 키 끝에 추가되는 상대 경로입니다. 기본 레지스트리 키를 얻거나 설정하려면 CWinAppEx::GetRegistryBase 및 CWinAppEx::SetRegistryBase 메서드를 각각 사용합니다.
CContextMenuManager::LoadState 메서드를 사용하여 레지스트리에서 바로 가기 메뉴를 로드합니다.
CContextMenuManager::SetDontCloseActiveMenu
CContextMenuManager가 새 팝업 메뉴를 표시할 때 활성 팝업 메뉴를 닫는지 여부를 제어합니다.
void SetDontCloseActiveMenu (BOOL bSet = TRUE);
매개 변수
bSet
[in] 활성 팝업 메뉴를 닫을지 여부를 제어하는 부울 매개 변수입니다. TRUE 값은 활성 팝업 메뉴가 닫혀 있지 않음을 나타냅니다. FALSE는 활성 팝업 메뉴가 닫혀 있음을 나타냅니다.
설명
기본적으로 CContextMenuManager
활성 팝업 메뉴를 닫습니다.
CContextMenuManager::ShowPopupMenu
지정된 바로 가기 메뉴를 표시합니다.
virtual BOOL ShowPopupMenu(
UINT uiMenuResId,
int x,
int y,
CWnd* pWndOwner,
BOOL bOwnMessage = FALSE,
BOOL bRightAlign = FALSE);
virtual CMFCPopupMenu* ShowPopupMenu(
HMENU hmenuPopup,
int x,
int y,
CWnd* pWndOwner,
BOOL bOwnMessage = FALSE,
BOOL bAutoDestroy = TRUE,
BOOL bRightAlign = FALSE);
매개 변수
uiMenuResId
[in] 이 메서드가 표시할 메뉴의 리소스 ID입니다.
x
[in] 클라이언트 좌표의 바로 가기 메뉴에 대한 가로 오프셋입니다.
y
[in] 클라이언트 좌표의 바로 가기 메뉴에 대한 세로 오프셋
pWndOwner
[in] 바로 가기 메뉴의 부모 창에 대한 포인터입니다.
bOwnMessage
[in] 메시지가 라우팅되는 방법을 나타내는 부울 매개 변수입니다. bOwnMessage가 FALSE이면 표준 MFC 라우팅이 사용됩니다. 그렇지 않으면 pWndOwner 가 메시지를 받습니다.
hmenuPopup
[in] 이 메서드가 표시할 메뉴의 핸들입니다.
bAutoDestroy
[in] 메뉴가 자동으로 제거되는지 여부를 나타내는 부울 매개 변수입니다.
bRightAlign
[in] 메뉴 항목이 정렬되는 방식을 나타내는 부울 매개 변수입니다. bRightAlign이 TRUE이면 오른쪽에서 왼쪽으로 읽기 순서에 맞게 메뉴가 오른쪽 맞춤됩니다.
Return Value
메서드에 메뉴가 성공적으로 표시되면 첫 번째 메서드 오버로드가 0이 아닌 값을 반환합니다. 그렇지 않으면 0입니다. 두 번째 메서드 오버로드는 바로 가기 메뉴가 올바르게 표시되면 CMFCPopupMenu에 대한 포인터를 반환하고, 그렇지 않으면 NULL을 반환합니다.
설명
이 메서드는 두 메서드 모두 바로 가기 메뉴를 표시하는 CContextMenuManager::TrackPopupMenu 메서드와 유사합니다. 그러나 TrackPopupMenu
선택한 메뉴 명령의 인덱스가 반환됩니다.
매개 변수 bAutoDestroy 가 FALSE이면 상속된 DestroyMenu
메서드를 수동으로 호출하여 메모리 리소스를 해제해야 합니다. 기본 구현에서는 ShowPopupMenu
bAutoDestroy 매개 변수를 사용하지 않습니다. 나중에 사용하거나 클래스에서 파생된 사용자 지정 클래스에 CContextMenuManager
대해 제공됩니다.
CContextMenuManager::TrackPopupMenu
지정된 바로 가기 메뉴를 표시하고 선택한 바로 가기 메뉴 명령의 인덱스를 반환합니다.
virtual UINT TrackPopupMenu(
HMENU hmenuPopup,
int x,
int y,
CWnd* pWndOwner,
BOOL bRightAlign = FALSE);
매개 변수
hmenuPopup
[in] 이 메서드가 표시하는 바로 가기 메뉴의 핸들입니다.
x
[in] 클라이언트 좌표의 바로 가기 메뉴에 대한 가로 오프셋입니다.
y
[in] 클라이언트 좌표의 바로 가기 메뉴에 대한 세로 오프셋입니다.
pWndOwner
[in] 바로 가기 메뉴의 부모 창에 대한 포인터입니다.
bRightAlign
[in] 메뉴 항목이 정렬되는 방법을 나타내는 부울 매개 변수입니다. bRightAlign이 TRUE이면 오른쪽에서 왼쪽으로 읽기 순서에 맞게 메뉴가 오른쪽 맞춤됩니다. bRightAlign이 FALSE이면 왼쪽에서 오른쪽 읽기 순서로 메뉴가 왼쪽 맞춤됩니다.
Return Value
사용자가 선택하는 명령의 메뉴 명령 ID입니다. 사용자가 메뉴 명령을 선택하지 않고 바로 가기 메뉴를 닫으면 0입니다.
설명
이 메서드는 바로 가기 메뉴를 표시하는 모달 호출로 작동합니다. 사용자가 바로 가기 메뉴를 닫거나 명령을 선택할 때까지 애플리케이션은 코드에서 다음 줄로 계속 진행되지 않습니다. 바로 가기 메뉴를 표시하는 데 사용할 수 있는 다른 방법은 CContextMenuManager::ShowPopupMenu입니다. 이 메서드는 모달 호출이 아니며 선택한 명령의 ID를 반환하지 않습니다.