다음을 통해 공유


IContextMenu::QueryContextMenu 메서드(shobjidl_core.h)

바로 가기 메뉴에 명령을 추가합니다.

구문

HRESULT QueryContextMenu(
  HMENU hmenu,
  UINT  indexMenu,
  UINT  idCmdFirst,
  UINT  idCmdLast,
  UINT  uFlags
);

매개 변수

hmenu

형식: HMENU

바로 가기 메뉴에 대한 핸들입니다. 처리기는 메뉴 항목을 추가할 때 이 핸들을 지정해야 합니다.

indexMenu

형식: UINT

첫 번째 새 메뉴 항목을 삽입할 위치(0부터 시작)입니다.

idCmdFirst

형식: UINT

처리기가 메뉴 항목 식별자에 대해 지정할 수 있는 최소값입니다.

idCmdLast

형식: UINT

처리기가 메뉴 항목 식별자에 대해 지정할 수 있는 최대값입니다.

uFlags

형식: UINT

바로 가기 메뉴를 변경할 수 있는 방법을 지정하는 선택적 플래그입니다. 이 매개 변수는 다음 값의 조합으로 설정할 수 있습니다. 하위 단어의 나머지 비트는 시스템에서 예약합니다. 고급 단어는 컨텍스트별 통신에 사용할 수 있습니다. CMF_RESERVED 값을 사용하여 낮은 순서의 단어를 마스킹할 수 있습니다.

CMF_NORMAL(0x00000000)

0x00000000. 정상 연산을 나타냅니다. 바로 가기 메뉴 확장, 네임스페이스 확장 또는 끌어서 놓기 처리기는 모든 메뉴 항목을 추가할 수 있습니다.

CMF_DEFAULTONLY(0x00000001)

0x00000001. 사용자는 일반적으로 두 번 클릭하여 기본 작업을 활성화합니다. 이 플래그는 메뉴에서 기본 항목을 수정하지 않으면 아무 것도 추가하지 않는 바로 가기 메뉴 확장에 대한 힌트를 제공합니다. 이 값이 지정된 경우 바로 가기 메뉴 확장 또는 끌어서 놓기 처리기는 메뉴 항목을 추가하면 안 됩니다. 네임스페이스 확장은 최소한 기본 항목만 추가해야 합니다.

CMF_VERBSONLY(0x00000002)

0x00000002. 바로 가기 메뉴는 바로 가기 파일(일반적으로 .lnk 파일)의 바로 가기 메뉴입니다. 바로 가기 메뉴 처리기는 이 값을 무시해야 합니다.

CMF_EXPLORE(0x00000004)

0x00000004. Windows Explorer 트리 창이 있습니다.

CMF_NOVERBS(0x00000008)

0x00000008. 이 플래그는 보내기 메뉴에 표시되는 항목에 대해 설정됩니다. 바로 가기 메뉴 처리기는 이 값을 무시해야 합니다.

CMF_CANRENAME(0x00000010)

0x00000010. 호출 애플리케이션은 항목의 이름 바꾸기를 지원합니다. 바로 가기 메뉴 또는 끌어서 놓기 처리기는 이 플래그를 무시해야 합니다. 네임스페이스 확장은 해당하는 경우 메뉴에 이름 바꾸기 항목을 추가해야 합니다.

CMF_NODEFAULT(0x00000020)

0x00000020. 메뉴의 항목이 기본값으로 설정되지 않았습니다. 끌어서 놓기 처리기는 이 플래그를 무시해야 합니다. 네임스페이스 확장은 메뉴 항목을 기본값으로 설정해서는 안 됩니다.

CMF_INCLUDESTATIC(0x00000040)

이 값은 사용할 수 없습니다.

Windows Server 2003 및 Windows XP: 0x00000040. 정적 메뉴가 생성되고 있습니다. 브라우저에서만 이 플래그를 사용해야 합니다. 다른 모든 바로 가기 메뉴 확장은 무시해야 합니다.

CMF_ITEMMENU(0x00000080)

0x00000080. 호출하는 애플리케이션은 보기의 배경이 아닌 보기의 항목에서 바로 가기 메뉴를 호출합니다.

Windows Server 2003 및 Windows XP: 이 값은 사용할 수 없습니다.

CMF_EXTENDEDVERBS(0x00000100)

0x00000100. 호출 애플리케이션은 확장 동사를 원합니다. 사용자가 개체를 마우스 오른쪽 단추로 클릭하면 일반 동사가 표시됩니다. 확장 동사를 표시하려면 Shift 키를 누르는 동안 마우스 오른쪽 단추를 클릭해야 합니다.

CMF_DISABLEDVERBS(0x00000200)

0x00000200. 호출 애플리케이션은 레거시 메뉴와 같이 사용하지 않도록 설정된 동사를 호출하려고 합니다.

Windows Server 2003 및 Windows XP: 이 값은 사용할 수 없습니다.

CMF_ASYNCVERBSTATE(0x00000400)

0x00000400. 동사 상태를 비동기적으로 평가할 수 있습니다.

Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: 이 값은 사용할 수 없습니다.

CMF_OPTIMIZEFORINVOKE(0x00000800)

0x00000800. 구현에서 IContextMenu::QueryContextMenu 를 우회하기 위해 정식 동사 이름을 통해 동사의 호출을 지원하지 않는 상황에 맞는 메뉴 처리기를 알립니다.

Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: 이 값은 사용할 수 없습니다.

CMF_SYNCCASCADEMENU(0x00001000)

0x00001000. 하위 메뉴가 동기적으로 채워집니다.

Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: 이 값은 사용할 수 없습니다.

CMF_DONOTPICKDEFAULT(0x00002000)

0x00002000. 동사를 명시적으로 지정하지 않으면 해당 위치에 기본 동사를 사용하지 마세요.

Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: 이 값은 사용할 수 없습니다.

CMF_RESERVED(0xffff0000)

0xffff0000. 이 플래그는 사용해서는 안 되는 모든 비트를 지정하는 비트 마스크입니다. 마스크로만 사용됩니다. 매개 변수 값으로 전달하지 마세요.

반환 값

형식: HRESULT

성공하면 심각도 값이 SEVERITY_SUCCESS 설정되고 해당 코드 값이 할당된 가장 큰 명령 식별자의 오프셋과 1로 설정된 HRESULT 값을 반환합니다. 예를 들어 idCmdFirst 가 5로 설정되어 있고 명령 식별자가 5, 7 및 8인 메뉴에 3개의 항목을 추가하는 경우 반환 값은 MAKE_HRESULT(SEVERITY_SUCCESS, 0, 8 - 5 + 1)이어야 합니다. 그렇지 않으면 COM 오류 값이 반환됩니다.

설명

이 메서드는 InsertMenu 또는 InsertMenuItem 을 호출하여 해당 메뉴 항목을 hmenu로 지정된 메뉴에 삽입해야 합니다. indexMenu 매개 변수는 첫 번째 메뉴 항목에 사용할 인덱스입니다. 각 메뉴 항목의 식별자는 idCmdFirstidCmdLast로 정의된 범위 내에 있어야 합니다.

일반적인 방법은 첫 번째 명령 식별자를 idCmdFirst (0의 오프셋)로 설정하고 각 추가 명령에 대한 오프셋을 하나씩 증분하는 것입니다. 이 방법은 idCmdLast 를 초과하지 않도록 하고 다른 처리기에서 사용할 수 있는 식별자 범위를 유지합니다. IContextMenu::GetCommandString 및 IContextMenu::InvokeCommand에 대한 후속 호출에서 명령을 식별하는 데 사용할 수 있으므로 참조에 대한 오프셋을 저장합니다.

이후에 Shell이 다른 바로 가기 메뉴 처리기를 호출하는 경우 반환된 HRESULT의 코드 값을 사용하여 해당 처리기의 QueryContextMenu 메서드를 호출할 때 idCmdFirst를 설정합니다.

상황에 맞는 메뉴 처리기가 팝업 메뉴 항목을 추가하는 경우 IContextMenu::QueryContextMenu 를 사용하여 WM_INITMENUPOPUP 메시지를 전달하려면 해당 메뉴에 하나 이상의 항목을 추가해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 shobjidl_core.h(Shobjidl.h 포함)
DLL Shell32.dll(버전 4.0 이상)