Partager via


algorithme de routage des commandes

Dans les commandes de Visual Studio sont gérés par plusieurs composants individuels. Les commandes sont routées du contexte la plus profonde, en fonction de la sélection actuelle, (également appelé global) au contexte externe. Pour plus d'informations, consultez disponibilité de commande.

commande de résolution de commande

Les commandes sont passées via les échelons de commande suivants le contexte :

  1. les compléments : L'environnement offre d'abord la commande à tous les compléments qui sont présent.

  2. Commandes élevée : Ces commandes sont stockées à l'aide de IVsRegisterPriorityCommandTarget. Ils sont appelés pour chaque commande dans Visual Studio, et sont appelés dans l'ordre dans lequel ils ont été enregistrés.

  3. commandes de menu contextuel : Une commande située sur un menu contextuel est d'abord offerte à la cible de la commande qui est fournie au menu contextuel, puis qui au routage classique.

  4. Cibles de commande SET de barre d'outils : Ces cibles de la commande sont enregistrées lorsque vous appelez l' SetupToolbar2. Le paramètre pCmdTarget peut être null. Si ce n'est pas null, cette cible de la commande est utilisée pour mettre à jour toutes les commandes situées dans la barre d'outils que vous installez. Si le shell installe votre barre d'outils, il passe le frame de fenêtre comme pCmdTarget afin que toutes les mises à jour des commandes dans votre barre d'outils via le frame de fenêtre, même si ce n'est pas dans focus.

  5. fenêtre Outil : Les fenêtres Outil, qui implémentent généralement l'interface d' IVsWindowPane , doivent également implémenter l'interface de IOleCommandTarget afin que Visual Studio puisse obtenir la cible de la commande lorsque la fenêtre Outil est la fenêtre active. Toutefois, si la fenêtre Outil qui a le focus est la fenêtre de Projet , la commande est routé vers l'interface d' IVsUIHierarchy qui est le parent commun des éléments sélectionnés. Si cette sélection couvre plusieurs projets, la commande est routée vers la hiérarchie d' IVsSolution . l'interface d' IVsUIHierarchy contient l' QueryStatusCommand et les méthodes d' ExecCommand qui sont analogues aux commandes correspondantes sur l'interface d' IOleCommandTarget .

  6. fenêtre de document : Si la commande a la balise de RouteToDocs définie dans son fichier de .vsct, Visual Studio recherche une cible de la commande dans l'objet de vue du document, qui est une instance d'une interface d' IVsWindowPane ou une instance d'un objet de document (en général une interface d' IVsTextLines ou une interface d' IVsTextBuffer ). Si l'objet de vue du document ne prend pas en charge la commande, Visual Studio route la commande à l'interface d' IOleCommandTarget qui est retournée. (Il s'agit d'une interface facultative pour les objets de données du document.)

  7. hiérarchie actuelle : la hiérarchie actuelle peut être le projet qui possède la fenêtre de document actif ou la hiérarchie qui est sélectionnée dans Explorateur de solutions. Visual Studio recherche l'interface d' IOleCommandTarget implémentée sur le actuel, ou actif, hiérarchie. La hiérarchie doit prendre en charge les commandes valides chaque fois que la hiérarchie est actif, même si une fenêtre de document d'un élément de projet a le focus. Toutefois, les commandes qui s'appliquent uniquement lorsque Explorateur de solutions a le focus doivent être prises en charge en utilisant l'interface d' IVsUIHierarchy et de son QueryStatusCommand et méthodes d'd' ExecCommand.

    Les commandes deCouper, de Copier, de Coller, de Delete, de Renommer, d' Entrée, et de DoubleClick requièrent une gestion spéciale. Pour plus d'informations sur la gestion des commandes de Delete et de Supprimer dans les hiérarchies, consultez l'interface d' IVsHierarchyDeleteHandler .

  8. global : Si une commande n'a pas été gérée par les contextes précités, des Visual Studio essaie de la router vers le VSPackage qui possède une commande qui implémente l'interface d' IOleCommandTarget . Si le VSPackage n'a pas déjà été chargé, il n'est pas chargé lorsque Visual Studio appelle la méthode d' QueryStatus . Le VSPackage est chargé uniquement lorsque la méthode d' Exec est appelée.

Voir aussi

Autres ressources

Command Routing in VSPackages

création de commande