Partager via


Gestion des messages et cibles de commande

L’interface IOleCommandTarget de distribution de commandes définit un mécanisme simple et extensible pour interroger et exécuter des commandes. Ce mécanisme est plus simple que celui d’Automation IDispatch , car il s’appuie entièrement sur un ensemble standard de commandes ; les commandes ont rarement des arguments et aucune information de type n’est impliquée (la sécurité du type 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, tout le monde peut définir un nouveau groupe et définir toutes les commandes au sein de ce groupe sans avoir besoin de coordonner avec Microsoft ou tout autre fournisseur. (Il s’agit essentiellement du même moyen de définition qu’une dispinterface et des dispIDs 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 à grande échelle comme le gère Automation.)

IOleCommandTarget gère 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, Office Binder), le conteneur peut avoir besoin 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 associée à IDispatch est plus importante que nécessaire ici, donc IOleCommandTarget offre un moyen plus simple pour 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 invoquer une commande, il peut transmettre la commande (et l’ensemble GUID) à Exec avec les options et les arguments, en récupérant ainsi une valeur de retour.

Voir aussi

Conteneurs de documents actifs