상황에 맞는 메뉴 COM 개체 구현
상황에 맞는 메뉴 확장은 in-proc 서버로 구현된 COM 개체입니다. 상황에 맞는 메뉴 확장은 IShellExtInit 및 IContextMenu 인터페이스를 구현해야 합니다. 상황에 맞는 메뉴 확장은 사용자가 상황에 맞는 메뉴 확장이 등록된 클래스의 개체에 대한 상황에 맞는 메뉴를 표시할 때 인스턴스화됩니다.
IShellExtInit 구현
상황에 맞는 메뉴 확장 COM 개체가 인스턴스화되면 IShellExtInit::Initialize 메서드가 호출됩니다. IShellExtInit::Initialize 는 상황에 맞는 메뉴가 적용되는 디렉터리 개체와 관련된 데이터를 포함하는 IDataObject 개체를 사용하여 상황에 맞는 메뉴 확장을 제공합니다.
IDataObject에는 CFSTR_DSOBJECTNAMES 형식의 데이터가 포함되어 있습니다. CFSTR_DSOBJECTNAMES 데이터 형식은 DSOBJECTNAMES 구조를 포함하는 HGLOBAL입니다. DSOBJECTNAMES 구조체에는 속성 시트 확장이 적용되는 디렉터리 개체에 대한 데이터가 포함됩니다.
IDataObject에는 CFSTR_DS_DISPLAY_SPEC_OPTIONS 형식의 데이터도 포함됩니다. CFSTR_DS_DISPLAY_SPEC_OPTIONS 데이터 형식은 DSDISPLAYSPECOPTIONS 구조를 포함하는 HGLOBAL입니다. DSDISPLAYSPECOPTIONS에는 확장에서 사용할 구성 데이터가 포함되어 있습니다.
IShellExtInit::Initialize에서 S_OK 이외의 값이 반환되면 상황에 맞는 메뉴 확장이 사용되지 않습니다.
IShellExtInit::Initialize 메서드의 pidlFolder 및 hkeyProgID 매개 변수는 사용되지 않습니다.
IContextMenu 구현
IShellExtInit::Initialize가 반환되면 상황에 맞는 메뉴 확장에서 추가할 메뉴 항목 또는 항목을 가져오기 위해 IContextMenu::QueryContextMenu 메서드가 호출됩니다. QueryContextMenu 구현은 매우 간단합니다. 상황에 맞는 메뉴 확장은 InsertMenuItem 또는 유사한 함수를 사용하여 메뉴 항목을 추가합니다. 메뉴 명령 식별자는 idCmdFirst 보다 크거나 같아야 하며 idCmdLast보다 작아야 합니다. QueryContextMenu 는 메뉴에 추가된 가장 큰 숫자 식별자와 1개를 반환해야 합니다. 메뉴 명령 식별자를 할당하는 가장 좋은 방법은 0에서 시작하여 순서대로 작동하는 것입니다. 상황에 맞는 메뉴 확장이 메뉴 항목에 필요하지 않은 경우 단순히 메뉴에 항목을 추가하고 QueryContextMenu에서 0을 반환하면 안 됩니다.
IContextMenu::GetCommandString 은 메뉴 항목에 대해 표시할 도움말 텍스트와 같은 메뉴 항목에 대한 텍스트 데이터를 검색하기 위해 호출됩니다. 확장에서 ANSI 문자열을 사용하는 동안 상황에 맞는 메뉴 호스트에서 유니코드 문자열을 사용할 수 있습니다. 이 때문에 GCS_HELPTEXTA, GCS_HELPTEXTW, GCS_VERBA 및 GCS_VERBW 사례를 개별적으로 처리해야 합니다. 이 메서드의 구현은 선택 사항입니다.
IContextMenu::InvokeCommand 는 상황에 맞는 메뉴 확장에 의해 설치된 메뉴 항목 중 하나를 선택하면 호출됩니다. 상황에 맞는 메뉴는 이 메서드에 대한 응답으로 원하는 작업을 수행하거나 시작합니다.