Obsługa komunikatów i obiekty docelowe poleceń
Interfejs IOleCommandTarget
wysyłania poleceń definiuje prosty i rozszerzalny mechanizm wykonywania zapytań i wykonywania poleceń. Ten mechanizm jest prostszy niż automatyzacja IDispatch
, ponieważ opiera się całkowicie na standardowym zestawie poleceń; polecenia rzadko mają argumenty, a żadne informacje o typie nie są zaangażowane (bezpieczeństwo typu jest również zmniejszane dla argumentów poleceń).
W projekcie interfejsu wysyłania poleceń każde polecenie należy do "grupy poleceń", która sama jest identyfikowana z identyfikatorem GUID. W związku z tym każda osoba może zdefiniować nową grupę i zdefiniować wszystkie polecenia w tej grupie bez konieczności koordynowania współpracy z firmą Microsoft lub innym dostawcą. (Jest to zasadniczo ten sam środek definicji co dispinterface plus dispIDs in Automation. W tym miejscu występuje nakładanie, chociaż ten mechanizm routingu poleceń jest przeznaczony tylko do routingu poleceń, a nie do obsługi skryptów/programowania na dużą skalę jako dojścia usługi Automation.
IOleCommandTarget
obsługuje następujące scenariusze:
Gdy obiekt jest aktywowany w miejscu, tylko paski narzędzi obiektu są zwykle wyświetlane, a paski narzędzi obiektu mogą mieć przyciski dla niektórych poleceń kontenera, takich jak Print, Print Preview, Save, New, Zoom i inne. (Standardy aktywacji w miejscu zalecają, aby obiekty usuwały takie przyciski ze swoich pasków narzędzi lub przynajmniej je wyłączały. Ten projekt umożliwia włączenie tych poleceń i kierowanie ich do właściwej procedury obsługi. Obecnie nie ma mechanizmu wysyłania tych poleceń do kontenera przez obiekt .
Gdy aktywny dokument jest osadzony w aktywnym kontenerze dokumentów (takim jak binder pakietu Office), może być konieczne wysłanie poleceń takich jak Drukowanie, Konfiguracja strony, Właściwości i inne do zawartego aktywnego dokumentu.
Ten prosty routing poleceń można obsłużyć za pomocą istniejących standardów automatyzacji i IDispatch
. Jednak nakład pracy związany z IDispatch
tym jest większy niż w tym miejscu, więc IOleCommandTarget
zapewnia prostsze środki do osiągnięcia tych samych celów:
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);
}
Metoda QueryStatus
w tym miejscu sprawdza, czy jest obsługiwany określony zestaw poleceń, zestaw identyfikowany z identyfikatorem GUID. To wywołanie wypełnia tablicę wartości OLECMD (struktur) z obsługiwaną listą poleceń, a także zwraca tekst opisujący nazwę polecenia i/lub informacje o stanie. Gdy obiekt wywołujący chce wywołać polecenie, może przekazać polecenie (i ustawić identyfikator GUID) do Exec
polecenia wraz z opcjami i argumentami, wracając do wartości zwracanej.