Algorithme de routage des commandes

Dans les commandes Visual Studio, les commandes sont gérées par un certain nombre de composants différents. Les commandes sont routées du contexte le plus interne, qui est basé sur la sélection actuelle, vers le contexte le plus externe (également appelé global). Pour plus d’informations, consultez La disponibilité des commandes.

Ordre de résolution des commandes

Les commandes sont passées par les niveaux de contexte de commande suivants :

  1. Compléments : L’environnement offre d’abord la commande à tous les compléments présents.

  2. Commandes de priorité : ces commandes sont inscrites à l’aide IVsRegisterPriorityCommandTargetde . Ils sont appelés pour chaque commande dans Visual Studio et sont appelés dans l’ordre dans lequel ils ont été inscrits.

  3. Commandes de menu contextuel : une commande située dans un menu contextuel est d’abord proposée à la cible de commande fournie au menu contextuel, puis au routage classique.

  4. Barre d’outils définir des cibles de commande : ces cibles de commande sont inscrites lorsque vous appelez SetupToolbar2. Le pCmdTarget paramètre peut être null. Si ce n’est pas nullle cas, cette cible de commande est utilisée pour mettre à jour toutes les commandes situées dans la barre d’outils que vous configurez. Si l’interpréteur de commandes configure votre barre d’outils, il passe le cadre de la fenêtre comme suit pCmdTarget afin que toutes les mises à jour apportées aux commandes de votre barre d’outils transitent par le cadre de la fenêtre, même si elle n’est pas au focus.

  5. Fenêtre outil : Fenêtres d’outils, qui implémentent généralement l’interface IVsWindowPane , doivent également implémenter l’interface IOleCommandTarget afin que Visual Studio puisse obtenir la cible de 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 Projet , la commande est routée vers l’interface IVsUIHierarchy qui est le parent commun des éléments sélectionnés. Si cette sélection s’étend sur plusieurs projets, la commande est routée vers la IVsSolution hiérarchie. L’interface IVsUIHierarchy contient les méthodes et ExecCommand les QueryStatusCommand méthodes analogues aux commandes correspondantes sur l’interfaceIOleCommandTarget.

  6. Fenêtre de document : si l’indicateur RouteToDocs est défini dans son fichier .vsct , Visual Studio recherche une cible de commande sur l’objet d’affichage de document, qui est une instance d’une IVsWindowPane interface ou une instance d’un objet de document (généralement une IVsTextLines interface ou une IVsTextBuffer interface). Si l’objet d’affichage de document ne prend pas en charge la commande, Visual Studio route la commande vers l’interface IOleCommandTarget retournée. (Il s’agit d’une interface facultative pour les objets de données de document.)

  7. Hiérarchie actuelle : la hiérarchie actuelle peut être le projet propriétaire de la fenêtre de document active ou de la hiérarchie sélectionnée dans Explorateur de solutions. Visual Studio recherche l’interface IOleCommandTarget implémentée sur la hiérarchie active ou active. La hiérarchie doit prendre en charge les commandes valides chaque fois que la hiérarchie est active, 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 doit être pris en charge à l’aide de l’interface IVsUIHierarchy et de ses QueryStatusCommandExecCommand méthodes.

    Les commandes Couper, Copier, Coller, Supprimer, Renommer, Entrée et DoubleClick nécessitent une gestion spéciale. Pour plus d’informations sur la gestion des commandes Delete et Remove dans les hiérarchies, consultez l’interface IVsHierarchyDeleteHandler .

  8. Global : si une commande n’a pas été gérée par les contextes mentionnés précédemment, Visual Studio tente de l’acheminer vers le VSPackage propriétaire d’une commande qui implémente l’interface IOleCommandTarget . Si le VSPackage n’a pas déjà été chargé, il n’est pas chargé lorsque Visual Studio appelle la QueryStatus méthode. VsPackage est chargé uniquement lorsque la Exec méthode est appelée.