Disposition des commandesMaking Commands Available

Lorsque plusieurs packages VS sont ajoutés à Visual Studio, l’interface utilisateur (IU) peut devenir trop avec les commandes.When multiple VSPackages are added to Visual Studio, the user interface (UI) may become overcrowded with commands. Vous pouvez programmer votre package afin de réduire ce problème, comme suit :You can program your package to help reduce this problem, as follows:

  • Le programme du package afin qu’il est chargé uniquement lorsqu’un utilisateur le requiert.Program the package so that it is loaded only when a user requires it.

  • Le package du programme afin que ses commandes sont affichées uniquement quand ils peuvent être nécessaires dans le contexte de l’état actuel de l’environnement de développement intégré (IDE).Program the package so that its commands are displayed only when they may be required in the context of the current state of the integrated development environment (IDE).

Chargement différéDelayed Loading

La manière classique pour activer le chargement différé consiste à concevoir le VSPackage afin que ses commandes sont affichées dans l’interface utilisateur, mais le package lui-même n’est pas chargé tant qu’un utilisateur clique sur une des commandes.The typical way to enable delayed loading is to design the VSPackage so that its commands are displayed in the UI, but the package itself is not loaded until a user clicks one of the commands. Pour ce faire, dans le fichier .vsct, créer des commandes qui n’ont aucun indicateur de commande.To accomplish this, in the .vsct file, create commands that have no command flags.

L’exemple suivant montre la définition d’une commande de menu à partir d’un fichier .vsct.The following example shows the definition of a menu command from a .vsct file. Ceci est la commande qui est générée par le modèle de Package Visual Studio lorsque le commande de Menu option est sélectionnée dans le modèle.This is the command that is generated by the Visual Studio Package Tempalte when the Menu Command option in the template is selected.

<Button guid="guidTopLevelMenuCmdSet" id="cmdidTestCommand" priority="0x0100" type="Button">
  <Parent guid="guidTopLevelMenuCmdSet" id="MyMenuGroup" />
  <Icon guid="guidImages" id="bmpPic1" />
  <Strings>
    <CommandName>cmdidTestCommand</CommandName>
    <ButtonText>Test Command</ButtonText>
  </Strings>
</Button>

Dans l’exemple, si le groupe parent, MyMenuGroup, est un enfant d’un menu de niveau supérieur telles que la outils menu, la commande sera visible dans ce menu, mais le package qui exécute la commande ne sera pas chargé tant que l’utilisateur clique sur la commande par un utilisateur.In the example, if the parent group, MyMenuGroup, is a child of a top-level menu such as the Tools menu, the command will be visible on that menu, but the package that executes the command will not be loaded until the command is clicked by a user. Toutefois, par programmation la commande pour mettre en œuvre la IOleCommandTarget interface, vous pouvez activer le package à charger lorsque le menu qui contient la commande est développé en premier.However, by programming the command to implement the IOleCommandTarget interface, you can enable the package to be loaded when the menu that contains the command is first expanded.

Notez que le chargement différé peut également améliorer les performances de démarrage.Notice that delayed loading may also improve start-up performance.

Contexte actuel et la visibilité des commandesCurrent Context and the Visibility of Commands

Vous pouvez programmer VSPackage commandes soient visibles ou masquées, selon l’état actuel des données VSPackage ou les actions qui sont actuellement pertinentes.You can program VSPackage commands to be visible or hidden, depending on the current state of the VSPackage data or the actions that are currently relevant. Vous pouvez activer le VSPackage pour définir l’état de ses commandes, généralement à l’aide d’une implémentation de la QueryStatus méthode à partir de la IOleCommandTarget interface, mais cela nécessite le VSPackage doit être chargé avant de pouvoir exécuter le code.You can enable the VSPackage to set the state of its commands, typically by using an implementation of the QueryStatus method from the IOleCommandTarget interface, but this requires the VSPackage to be loaded before it can execute the code. Au lieu de cela, nous vous recommandons d’activer l’IDE gérer la visibilité des commandes sans chargement du package.Instead, we recommend that you enable the IDE to manage the visibility of the commands without loading the package. Pour ce faire, dans le fichier .vsct, associer des commandes avec un ou plusieurs contextes d’interface utilisateur spéciales.To do this, in the .vsct file, associate commands with one or more special UI contexts. Les contextes d’interface utilisateur sont identifiés par un GUID connu comme un GUID de contexte de commande.These UI contexts are identified by a GUID known as a command context GUID.

Visual StudioVisual Studio surveille les modifications qui résultent des actions telles que le chargement d’un projet ou allant de modification pour la génération de l’utilisateur. monitors changes that result from user actions such as loading a project or going from editing to building. Lorsque des modifications sont apportées, modifier l’apparence de l’IDE est automatiquement.As changes occur, the appearance of the IDE is automatically modified. Le tableau suivant montre quatre contextes principales de l’IDE change qui Visual StudioVisual Studio moniteurs.The following table shows four major contexts of IDE change that Visual StudioVisual Studio monitors.

Type de contexteType of Context DescriptionDescription
Type de projet actifActive Project Type Pour la plupart des types de projet, cela GUID valeur est le même que le GUID du VSPackage qui implémente le projet.For most project types, this GUID value is the same as the GUID of the VSPackage that implements the project. Toutefois, Visual C++Visual C++ projets utilisent le Type de projet GUID comme valeur.However, Visual C++Visual C++ projects use the Project Type GUID as the value.
Fenêtre activeActive Window En règle générale, il s’agit de la dernière fenêtre de document actif qui établit le contexte actuel de l’interface utilisateur pour les combinaisons de touches.Typically, this is the last active document window that establishes the current UI context for key bindings. Toutefois, il peut également être une fenêtre outil qui a une table de clé de liaison qui ressemble à du navigateur Web interne.However, it could also be a tool window that has a key binding table that resembles the internal Web browser. Pour les fenêtres de document d’à plusieurs onglets tels que l’éditeur HTML, chaque onglet dispose d’un contexte autre commande GUID.For multi-tabbed document windows such as the HTML editor, every tab has a different command context GUID.
Service de langage ActiveActive Language Service Le service de langage qui est associé au fichier qui est actuellement affiché dans un éditeur de texte.The language service that is associated with the file that is currently displayed in a text editor.
Fenêtre outil ActiveActive Tool Window Une fenêtre outil qui est ouvert et a le focus.A tool window that is open and has focus.

Une zone de contexte principales cinquième est l’état de l’interface utilisateur de l’IDE.A fifth major context area is the UI state of the IDE. Contextes d’interface utilisateur sont identifiés par le contexte de commande active GUIDs, comme suit :UI contexts are identified by active command context GUIDs, as follows:

Masquage et affichage des commandes en fonction de contexteHiding and Displaying Commands Based on Context

Vous pouvez afficher ou masquer un package dans l’IDE sans charger le package lui-même.You can display or hide a package command in the IDE without loading the package itself. Pour ce faire, définissez la commande dans le fichier .vsct du package à l’aide de la DefaultDisabled, DefaultInvisible, et DynamicVisibility commande indicateurs et ajouter un ou plusieurs VisibilityItem éléments à la VisibilityConstraints section.To do this, define the command in the .vsct file of the package by using the DefaultDisabled, DefaultInvisible, and DynamicVisibility command flags and adding one or more VisibilityItem elements to the VisibilityConstraints section. Lorsqu’un contexte de la commande spécifiée GUID devient actif, la commande est affichée sans le chargement du package.When a specified command context GUID becomes active, the command is displayed without loading the package.

GUID de contexte personnaliséCustom Context GUIDs

Si un contexte de la commande appropriée que GUID n’est pas déjà défini, vous pouvez définir un dans votre VSPackage et puis qu’il soit actif ou inactif afin de contrôler la visibilité des commandes de votre programme.If an appropriate command context GUID is not already defined, you can define one in your VSPackage and then program it to be active or inactive as required to control the visibility of your commands. Utilisez la SVsShellMonitorSelection service :Use the SVsShellMonitorSelection service to:

  • Inscrivez les GUID de contexte (en appelant le GetCmdUIContextCookie méthode).Register context GUIDs (by calling the GetCmdUIContextCookie method).

  • Obtenir l’état d’un contexte GUID (en appelant le IsCmdUIContextActive méthode).Get the state of a context GUID (by calling the IsCmdUIContextActive method).

  • Activer le contexte GUIDs et désactiver (en appelant le SetCmdUIContext méthode).Turn context GUIDs on and off (by calling the SetCmdUIContext method).

    Attention

    Assurez-vous que votre VSPackage n’affecte pas l’état de n’importe quel contexte existant GUID, car d’autres packages VS dépendent les.Make sure that your VSPackage does not affect the state of any existing context GUID because other VSPackages may depend on them.

ExempleExample

L’exemple suivant d’une commande VSPackage montre la visibilité dynamique d’une commande qui est gérée par des contextes de commande sans charger le VSPackage.The following example of a VSPackage command demonstrates the dynamic visibility of a command that is managed by command contexts without loading the VSPackage.

La commande est définie pour être activé et affiche chaque fois qu’il existe une solution ; Autrement dit, chaque fois qu’un du contexte de la commande suivante GUID est actif :The command is set to be enabled and displayed whenever a solution exists; that is, whenever one of the following command context GUIDs is active:

Dans l’exemple, notez que chaque indicateur de commande est distinct indicateur de commande élément.In the example, notice that every command flag is a separate Command Flag element.

<Button guid="guidDynamicVisibilityCmdSet" id="cmdidMyCommand"
        priority="0x0100" type="Button">
  <Parent guid="guidDynamicVisibilityCmdSet" id="MyMenuGroup" />
  <Icon guid="guidImages" id="bmpPic1" />
  <CommandFlag>DefaultDisabled</CommandFlag>
  <CommandFlag>DefaultInvisible</CommandFlag>
  <CommandFlag>DynamicVisibility</CommandFlag>
  <Strings>
    <CommandName>cmdidMyCommand</CommandName>
    <ButtonText>My Command name</ButtonText>
  </Strings>
</Button>

Notez également que chaque contexte d’interface utilisateur doit figurer dans un distinct VisibilityItem élément, comme suit.Also notice that every UI context must be given in a separate VisibilityItem element, as follows.

<VisibilityConstraints>
  <VisibilityItem guid="guidDynamicVisibilityCmdSet"
                  id="cmdidMyCommand" context="UICONTEXT_EmptySolution" />
  <VisibilityItem guid="guidDynamicVisibilityCmdSet"
                      id="cmdidMyCommand" context="UICONTEXT_SolutionHasSingleProject" />
  <VisibilityItem guid="guidDynamicVisibilityCmdSet"
                  id="cmdidMyCommand" context="UICONTEXT_SolutionHasMultipleProjects" />
</VisibilityConstraints>

Voir aussiSee also