다음을 통해 공유


상황에 맞는 메뉴 COM 개체 구현

상황에 맞는 메뉴 확장은 in-proc 서버로 구현된 COM 개체입니다. 상황에 맞는 메뉴 확장은 IShellExtInit 인터페이스와 IContextMenu 인터페이스를 구현해야 합니다. 상황에 맞는 메뉴 확장이 등록된 클래스 개체에 대해 상황 메뉴를 표시하면 해당 확장이 생성됩니다.

IShellExtInit 구현

상황에 맞는 메뉴 확장 COM 개체가 인스턴스화되면 IShellExtInit::Initialize 메서드가 호출됩니다. IShellExtInit::Initialize 상황에 맞는 메뉴 확장에 상황에 맞는 메뉴가 적용되는 디렉터리 개체와 관련된 데이터가 포함된 IDataObject 개체를 제공합니다.

IDataObjectCFSTR_DSOBJECTNAMES 형식의 데이터를 포함합니다. CFSTR_DSOBJECTNAMES 데이터 형식은 DSOBJECTNAMES 구조를 포함하는 HGLOBAL. DSOBJECTNAMES 구조체에는 속성 시트 확장이 적용되는 디렉터리 개체에 대한 데이터가 포함됩니다.

IDataObjectCFSTR_DS_DISPLAY_SPEC_OPTIONS 형식의 데이터도 포함합니다. CFSTR_DS_DISPLAY_SPEC_OPTIONS 데이터 형식은 HGLOBAL로, DSDISPLAYSPECOPTIONS 구조를 포함하고 있습니다. DSDISPLAYSPECOPTIONS 확장에서 사용할 구성 데이터를 포함합니다.

IShellExtInit::InitializeS_OK 이외의 값이 반환되면 상황에 맞는 메뉴 확장이 사용되지 않습니다.

IShellExtInit::Initialize 메서드의 pidlFolderhkeyProgID 매개 변수는 사용되지 않습니다.

IContextMenu 구현

IShellExtInit::Initialize 반환되면 IContextMenu::QueryContextMenu 메서드가 호출되어 상황에 맞는 메뉴 확장에서 추가할 메뉴 항목 또는 항목을 가져옵니다. QueryContextMenu 구현은 매우 간단합니다. 상황에 맞는 메뉴 확장은 InsertMenuItem 또는 유사한 함수를 사용하여 메뉴 항목을 추가합니다. 메뉴 명령 식별자는 idCmdFirst 보다 크거나 같아야 하며 idCmdLast 미만이어야 합니다. QueryContextMenu는 메뉴에 추가된 가장 큰 숫자 식별자에 1을 더한 값을 반환해야 합니다. 메뉴 명령 식별자를 할당하는 가장 좋은 방법은 0에서 시작하여 순서대로 작업하는 것입니다. 상황에 맞는 메뉴 확장이 메뉴 항목이 필요하지 않은 경우, 메뉴에 항목을 추가하지 말고 QueryContextMenu에서 0을 반환해야 합니다.

IContextMenu::GetCommandString 메뉴 항목에 대해 표시할 도움말 텍스트와 같은 메뉴 항목에 대한 텍스트 데이터를 검색하기 위해 호출됩니다. 확장에서 ANSI 문자열을 사용하는 동안 상황에 맞는 메뉴 호스트가 유니코드 문자열을 사용할 수 있습니다. 따라서 GCS_HELPTEXTA, GCS_HELPTEXTW, GCS_VERBAGCS_VERBW 사례를 개별적으로 처리해야 합니다. 이 메서드의 구현은 선택 사항입니다.

IContextMenu::InvokeCommand 상황에 맞는 메뉴 확장에 의해 설치된 메뉴 항목 중 하나를 선택하면 호출됩니다. 상황에 맞는 메뉴는 이 메서드에 대한 응답으로 원하는 작업을 수행하거나 시작합니다.