Gestion des messages et cibles des commandes

L'interface de dispatch de commande IOleCommandTarget définit un mécanisme simple et extensible pour interroger et exécuter des commandes. Ce mécanisme est plus simple qu’IDispatch d’Automation, car il dépend entièrement d’un ensemble standard de commandes. Les commandes ont rarement des arguments, et aucune information de type n’est requise. (La cohérence des types est également réduite pour les arguments de commande).

Dans la conception de l’interface de distribution de commandes, chaque commande appartient à un « groupe de commandes » qui est lui-même identifié avec un GUID. Par conséquent, une personne peut définir un nouveau groupe ainsi que toutes les commandes au sein de ce groupe sans avoir à coordonner avec Microsoft ou un autre fournisseur. (Il s’agit essentiellement du même moyen de définition qu’une dispinterface et des dispID dans Automation. Il y a chevauchement ici, bien que ce mécanisme de routage de commandes soit uniquement destiné au routage des commandes et non à la programmation de scripts sur une grande échelle en tant que handles Automation.)

IOleCommandTarget prend en charge les scénarios suivants :

  • Lorsqu’un objet est activé sur place, seules les barres d’outils de l’objet sont généralement affichées et les barres d’outils de l’objet peuvent avoir des boutons pour certaines commandes de conteneur telles que Print, Print Preview, Save, New, Zoom, etc. (Les normes d’activation sur place recommandent que les objets suppriment ces boutons de leurs barres d’outils, ou au moins les désactivent. Cette conception permet à ces commandes d’être activées et encore routées vers le gestionnaire approprié.) Actuellement, il n’existe aucun mécanisme permettant à l’objet de distribuer ces commandes au conteneur.

  • Lorsqu’un document actif est incorporé dans un conteneur de documents actif (par exemple, Bureau Binder), il peut être nécessaire d’envoyer des commandes telles que Print, Page Setup, Properties et autres au document actif contenu.

Le routage de commande simple peut être géré via les normes Automation existantes et IDispatch. Toutefois, la surcharge liée à IDispatch est supérieure à la valeur requise ici, IOleCommandTarget fournit donc un moyen plus simple d'atteindre les mêmes objectifs :

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

La QueryStatus méthode ici teste si un ensemble particulier de commandes, l’ensemble identifié avec un GUID, est pris en charge. Cet appel remplit un tableau de valeurs OLECMD (structures) avec la liste prise en charge des commandes, ainsi que le retour de texte décrivant le nom d’une commande et/ou des informations d’état. Lorsque l’appelant souhaite appeler une commande, il peut passer la commande (et le GUID set) avec Exec les options et les arguments, en récupérant une valeur de retour.

Voir aussi

Conteneurs de documents actifs