Целевые объекты сообщений и команды
Интерфейс IOleCommandTarget диспетчера команд определяет простой и расширяемый механизм для запроса и выполнения команды.Этот механизм проще, чем IDispatch автоматизации, поскольку он полагается на стандартном наборе полностью команд. команды редко имеют аргументы, и никакая информация о типе отключена (безопасность типа умалена для аргументов команды также).
В конструкции интерфейса диспетчера команд, каждая команда принадлежит к группе «команды», которая определена с Идентификатор GUID сама.Поэтому любой может определить новую группу и указать все команды в этой группе без необходимости координации с Microsoft или любым другим поставщиком.(Это, по существу означает то же, как и в dispinterface определения dispIDs автоматизации.Перекрытие здесь, хотя этот механизм маршрутизации команд только для маршрутизации команд, а не для включения/на большом объеме programmability как дескрипторы автоматизации).
IOleCommandTarget обрабатывает следующие сценарии:
Если объект только активированное на месте панели инструментов объекта обычно отображаются и панели инструментов объектов могут иметь кнопки для некоторых команд контейнера, как Печать, ПечатьПредварительный просмотр, Сохранить, New, Масштаб и другие.(Стандарты во встроенной активации объектов удалить те из них кнопки панели инструментов или хотя бы они блокируются.Такой подход позволяет эти команды включены или/и доступна в правый обработчиком). В настоящее время отсутствует механизм для объекта, чтобы проверить эти команды в контейнер.
Если активный документ внедрен в контейнер активных документов (например связыватель office), контейнер может отправлять команды то Печать, СтраницаУстановка, Свойства и другие к содержащимся активный документ.
Эта маршрутизация простой команды может обрабатываться с помощью существующих стандарты и 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 (структур) со списком поддерживаемых текста команд, так и возвращение, описывающий имя команды и сведения о состоянии.Если вызывающий объект желает вызвать команду, он может передавать команды (и набор Идентификатор GUID) в Exec вместе с параметрами и аргументами, принимающее задне возвращаемое значение.