Algorithme de routage de commandeCommand Routing Algorithm

Dans Visual Studio, les commandes sont gérées par un nombre des différents composants.In Visual Studio commands are handled by a number of different components. Commandes sont routées à partir du contexte plus profond, ce qui est basé sur la sélection actuelle, vers le contexte le plus extérieur (également appelé global).Commands are routed from the innermost context, which is based on the current selection, to the outermost (also known as global) context. Pour plus d’informations, consultez disponibilité.For more information, see Availability.

Ordre de résolution de commandeOrder of Command Resolution

Commandes sont transmises via les niveaux de contexte de commande suivants :Commands are passed through the following levels of command context:

  1. Les compléments : L’environnement offre tout d’abord la commande pour les compléments qui sont présents.Add-ins: The environment first offers the command to any add-ins that are present.

  2. Les commandes de priorité : ces commandes sont inscrits à l’aide de IVsRegisterPriorityCommandTarget.Priority commands: These commands are registered by using IVsRegisterPriorityCommandTarget. Ils sont appelés pour toutes les commandes dans Visual Studio et sont appelés dans l’ordre dans lequel ils ont été enregistrés.They are called for every command in Visual Studio, and are called in the order in which they were registered.

  3. Commandes de menu contextuel : une commande qui se trouve dans un menu contextuel est tout d’abord proposée à la cible de commande qui est fournie au menu contextuel, puis pour le routage par défaut.Context menu commands: A command located on a context menu is first offered to the command target that is provided to the context menu, and after that to the typical routing.

  4. Barre d’outils de définir des cibles de commande : ces cibles de commande sont enregistrés lorsque vous appelez SetupToolbar2.Toolbar set command targets: These command targets are registered when you call SetupToolbar2. Le pCmdTarget paramètre peut être null.The pCmdTarget parameter can be null. Si elle n’est pas null, cette cible de commande est utilisée pour mettre à jour toutes les commandes situées sur la barre d’outils que vous configurez.If it is not null, then this command target is used to update any commands located on the toolbar you are setting up. Si l’interface de configuration de votre barre d’outils, puis il transmet le frame de fenêtre comme le pCmdTarget afin que toutes les mises à jour pour les commandes de votre flux de barre d’outils dans le frame de fenêtre, même quand il n’est pas le focus.If the shell is setting up your toolbar, then it passes the window frame as the pCmdTarget so that all updates to the commands on your toolbar flow through the window frame, even when it is not in focus.

  5. Tool Window : Fenêtres, qui implémentent généralement le IVsWindowPane l’interface, doit également implémenter le IOleCommandTarget de l’interface qui permet d’obtenir la cible de commande dans Visual Studio lorsque la fenêtre outil est la fenêtre active.Tool Window: Tool windows, which typically implement the IVsWindowPane interface, should also implement the IOleCommandTarget interface so that Visual Studio can get the command target when the tool window is the active window. Toutefois, si la fenêtre outil qui a le focus est la projet fenêtre, puis la commande est acheminé vers le IVsUIHierarchy interface qui est le parent commun des éléments sélectionnés.However, if the tool window that has focus is the Project window, then the command is routed to the IVsUIHierarchy interface that is the common parent of the selected items. Si cette sélection s’étend sur plusieurs projets, la commande est acheminée vers le IVsSolution hiérarchie.If this selection spans multiple projects, the command is routed to the IVsSolution hierarchy. Le IVsUIHierarchy interface contient la QueryStatusCommand et ExecCommand méthodes analogues pour les commandes correspondantes sur le IOleCommandTarget interface.The IVsUIHierarchy interface contains the QueryStatusCommand and ExecCommand methods that are analogous to the corresponding commands on the IOleCommandTarget interface.

  6. Fenêtre de document : Si la commande RouteToDocs indicateur est défini dans le fichier .vsct, Visual Studio recherche une cible de la commande sur l’objet de vue de document, qui est soit une instance d’un IVsWindowPane interface ou une instance d’un objet de document (en général un IVsTextLinesinterface ou un IVsTextBuffer interface).Document Window: If the command has the RouteToDocs flag set in its .vsct file, Visual Studio looks for a command target on the document view object, which is either an instance of an IVsWindowPane interface or an instance of a document object (typically an IVsTextLines interface or a IVsTextBuffer interface). Si l’objet de vue de document ne prend pas en charge la commande, Visual Studio achemine la commande pour le IOleCommandTarget interface qui est retournée.If the document view object does not support the command, Visual Studio routes the command to the IOleCommandTarget interface that is returned. (Ceci est une interface facultative pour les objets de données de document.)(This is an optional interface for document data objects.)

  7. Hiérarchie actuelle : la hiérarchie actuelle peut être le projet qui possède la fenêtre de document actif ou de la hiérarchie sélectionnée dans l’Explorateur de solutions.Current hierarchy: The current hierarchy can be the project that owns the active document window or the hierarchy that is selected in Solution Explorer. Visual Studio recherche la IOleCommandTarget interface est implémentée sur la hiérarchie, active, ou en cours.Visual Studio looks for the IOleCommandTarget interface that is implemented on the current, or active, hierarchy. La hiérarchie doit prendre en charge les commandes qui sont valides lorsque la hiérarchie est active, même si une fenêtre de document d’un élément de projet a le focus.The hierarchy should support commands that are valid whenever the hierarchy is active, even if a document window of a project item has focus. Toutefois, les commandes qui s’appliquent uniquement lorsque l’Explorateur de solutions a le focus doit être pris en charge à l’aide de la IVsUIHierarchy interface et son QueryStatusCommand et ExecCommandméthodes.However, commands that apply only when Solution Explorer has focus must be supported by using the IVsUIHierarchy interface and its QueryStatusCommand and ExecCommandmethods.

    Couper, copie, coller, supprimer, renommer, entrezet Le double-clic commandes nécessitent un traitement spécial.Cut, Copy, Paste, Delete, Rename, Enter, and DoubleClick commands require special handling. Pour plus d’informations sur la gestion supprimer et supprimer commandes dans les hiérarchies, voir la IVsHierarchyDeleteHandler interface.For information about how to handle Delete and Remove commands in hierarchies, see the IVsHierarchyDeleteHandler interface.

  8. Global : Si une commande n’a pas été gérée par les contextes mentionnées précédemment, Visual Studio tente de router vers le VSPackage qui possède une commande qui implémente le IOleCommandTarget interface.Global: If a command has not been handled by the previously mentioned contexts, Visual Studio attempts to route it to the VSPackage that owns a command that implements the IOleCommandTarget interface. Si le package Visual Studio n’a pas déjà été chargé, il n’est pas chargé quand Visual Studio appelle le QueryStatus (méthode).If the VSPackage has not been loaded already, it is not loaded when Visual Studio calls the QueryStatus method. Le VSPackage est chargé uniquement lorsque le Exec méthode est appelée.The VSPackage is loaded only when the Exec method is called.

Voir aussiSee Also

Création de commandeCommand Design