Condividi tramite


Gestione dei messaggi e destinazioni comandi

L'interfaccia IOleCommandTarget dispatch del comando definisce un meccanismo semplice ed estendibile per eseguire query ed eseguire comandi. Questo meccanismo è più semplice di quello di IDispatch Automazione perché si basa interamente su un set standard di comandi; i comandi raramente hanno argomenti e non sono coinvolte informazioni sul tipo (la sicurezza dei tipi è diminuita anche per gli argomenti dei comandi).

Nella progettazione dell'interfaccia dispatch del comando, ogni comando appartiene a un "gruppo di comandi" che viene identificato con un GUID. Pertanto, chiunque può definire un nuovo gruppo e definire tutti i comandi all'interno di tale gruppo senza dover coordinare con Microsoft o qualsiasi altro fornitore. Si tratta essenzialmente degli stessi mezzi di definizione di una dispinterface più dispID in Automazione. C'è sovrapposizione in questo caso, anche se questo meccanismo di routing dei comandi è solo per il routing dei comandi e non per la programmabilità su larga scala come handle di automazione.

IOleCommandTarget gestisce gli scenari seguenti:

  • Quando un oggetto è attivato sul posto, vengono in genere visualizzate solo le barre degli strumenti dell'oggetto e le barre degli strumenti dell'oggetto possono avere pulsanti per alcuni dei comandi contenitore, ad esempio Stampa, Anteprima di stampa, Salva, Nuovo, Zoom e altri. Gli standard di attivazione sul posto consigliano agli oggetti di rimuovere tali pulsanti dalle relative barre degli strumenti o almeno disabilitarli. Questa progettazione consente di abilitare questi comandi e di essere ancora indirizzati al gestore corretto. Attualmente, non esiste alcun meccanismo per l'oggetto per inviare questi comandi al contenitore.

  • Quando un documento attivo è incorporato in un contenitore di documenti attivo,ad esempio Office Binder, il contenitore potrebbe dover inviare comandi quali Stampa, Imposta pagina, Proprietà e altri al documento attivo contenuto.

Questo semplice routing dei comandi può essere gestito tramite gli standard di automazione esistenti e IDispatch. Tuttavia, il sovraccarico coinvolto in IDispatch è più di quanto sia necessario in questo caso, quindi IOleCommandTarget offre un mezzo più semplice per ottenere gli stessi scopi:

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);
    }

Il QueryStatus metodo qui verifica se è supportato un particolare set di comandi, il set identificato con un GUID. Questa chiamata riempie una matrice di valori OLECMD (strutture) con l'elenco supportato di comandi, nonché restituendo testo che descrive il nome di un comando e/o informazioni sullo stato. Quando il chiamante desidera richiamare un comando, può passare il comando (e il GUID impostato) a insieme a Exec opzioni e argomenti, recuperando un valore restituito.

Vedi anche

Contenitori documenti attivi