메시지 처리 및 명령 대상
명령 디스패치 인터페이스 IOleCommandTarget
는 명령을 쿼리하고 실행하는 간단하고 확장 가능한 메커니즘을 정의합니다. 이 메커니즘은 표준 명령 집합에 전적으로 의존하기 때문에 Automation IDispatch
보다 간단합니다. 명령에는 인수가 거의 없으며 형식 정보가 관련되지 않습니다(명령 인수의 경우 형식 안전성도 감소함).
명령 디스패치 인터페이스 디자인에서 각 명령은 GUID로 식별되는 "명령 그룹"에 속합니다. 따라서 누구나 Microsoft 또는 다른 공급업체와 조율할 필요 없이 새 그룹을 정의하고 해당 그룹 내의 모든 명령을 정의할 수 있습니다. (이것은 기본적으로 Automation의 dispinterface 및 dispID와 동일한 정의 수단입니다. 이 명령 라우팅 메커니즘은 명령 라우팅에만 해당하며 Automation이 처리할 때 대규모로 스크립팅/프로그래밍이 가능하지는 않지만 여기에 겹칩니다.)
IOleCommandTarget
는 다음 시나리오를 처리합니다.
개체가 현재 위치에서 활성화되면 일반적으로 개체의 도구 모음만 표시되고 개체의 도구 모음에는 인쇄, 인쇄 미리 보기, 저장, 새로 만들기, 확대/축소 등의 컨테이너 명령 중 일부에 대한 단추가 있을 수 있습니다. (현재 위치 활성화 표준에서는 개체가 도구 모음에서 이러한 단추를 제거하거나 최소한 사용하지 않도록 설정하는 것이 좋습니다. 이 디자인을 사용하면 해당 명령을 사용하도록 설정하고 올바른 처리기로 라우팅할 수 있습니다.) 현재 개체가 이러한 명령을 컨테이너에 디스패치하는 메커니즘은 없습니다.
현재 문서가 현재 문서 컨테이너(예: Office Binder)에 포함된 경우 컨테이너는 인쇄, 페이지 설정, 속성 등의 명령을 포함된 활성 문서로 보내야 할 수 있습니다.
이 간단한 명령 라우팅은 기존 Automation 표준을 통해 처리할 수 있습니다 IDispatch
. 그러나 여기에 필요한 IDispatch
것보다 많은 오버헤드가 있으므로 IOleCommandTarget
동일한 끝을 달성하기 위한 더 간단한 수단을 제공합니다.
interface IOleCommandTarget : IUnknown
{
HRESULT QueryStatus(
[in] GUID *pguidCmdGroup,
[in] ULONG cCmds,
[in,out][size_is(cCmds)] OLECMD *prgCmds,
[in,out] OLECMDTEXT *pCmdText);
HRESULT Exec(
[in] GUID *pguidCmdGroup,
[in] DWORD nCmdID,
[in] DWORD nCmdExecOpt,
[in] VARIANTARG *pvaIn,
[in,out] VARIANTARG *pvaOut);
}
여기서 메서드는 QueryStatus
GUID로 식별되는 특정 명령 집합이 지원되는지 여부를 테스트합니다. 이 호출은 명령의 이름 및/또는 상태 정보를 설명하는 텍스트를 반환할 뿐만 아니라 지원되는 명령 목록으로 OLECMD 값(구조체) 배열을 채웁니다. 호출자가 명령을 호출하려는 경우 명령(및 SET GUID)을 옵션 및 인수와 함께 전달하여 Exec
반환 값을 다시 얻을 수 있습니다.