Udostępnij za pośrednictwem


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.

Zobacz też

Kontenery dokumentów aktywnych