Zpracování zpráv a cíle příkazů
Odesílající rozhraní příkaz IOleCommandTarget definuje jednoduchý a rozšiřitelné mechanismus k vytváření dotazů a příkazy.Tento mechanismus je jednodušší než na automatizaci IDispatch protože závisí zcela na standardní sadu příkazů; příkazy mají málo argumentů a žádné informace o typu se jedná (bezpečnost typů je rozměry i argumenty příkazu).
V návrhu rozhraní odeslání příkazu patří každý příkaz "příkaz skupina", která je sama označen GUID.Kdokoli tedy definovat nové skupiny a definovat všechny příkazy v rámci skupiny bez nutnosti koordinovat u společnosti Microsoft nebo jiných dodavatelů. (To je v podstatě stejným způsobem jako definice odesílající rozhraní a hodnoty dispID v automatizaci.Se překrývají, ačkoli tento mechanismus směrování příkazu je pouze pro příkazy směrování a ne pro skriptování/programování ve velkém měřítku jako úchyty automatizace.)
IOleCommandTargetzpracovává v následujících situacích:
Po aktivaci pouze objektu panely jsou obvykle zobrazeny a panely nástrojů na objekt může mít tlačítka pro kontejner příkazy jako objekt Tisk, TiskNáhled, Uložit, New, Lupaa další. (Aktivaci na místě, které doporučuje normy, objekty odebrat tyto tlačítka, panely nástrojů, nebo na nejméně je zakázat.Tento návrh umožňuje tyto příkazy povolena a dosud směrována na pravém obslužné rutiny). V současné době neexistuje žádný mechanismus pro objekt k odeslání těchto příkazů do kontejneru.
Pokud aktivní dokument je vložen v kontejneru aktivního dokumentu (například aplikace Office Binder), kontejner pravděpodobně potřebovat odeslat příkazy takové Tisk, stránkyinstalace, Vlastnostia jiné uzavřené aktivního dokumentu.
Tento jednoduchý příkaz směrování může obsluhovat prostřednictvím stávajících norem pro automatizaci a IDispatch.Však režie související s IDispatch je více než je nezbytně nutné, tak IOleCommandTarget jednodušší prostředkem k dosažení stejné zakončení:
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 Metoda zde testuje, zda určitou sadu příkazů, sady jsou označeny GUID, je podporováno.Toto volání vyplní pole OLECMD hodnoty seznamu podporovaných příkazů, stejně jako vrací text popisující název příkazu nebo stav informace (struktury).Pokud volající chce vyvolat příkaz, pak může předat příkaz (a sada GUID) na Exec možnosti a argumenty získali zpět návratovou hodnotu.