Comment : fournir un contexte pour les éditeursHow to: Provide context for editors

Pour un éditeur, le contexte est actif uniquement lorsque l’éditeur a le focus ou qu’il avait le focus immédiatement avant le focus a été déplacé vers une fenêtre outil.For an editor, the context is active only when the editor has focus or had focus immediately before the focus was moved to a tool window. Vous pouvez fournir le contexte pour un éditeur en effectuant les tâches suivantes :You can provide context for an editor by doing the following tasks:

  1. Créer un conteneur de contexte.Create a context bag.

  2. Publier le conteneur de contexte à l’identificateur de l’élément de sélection (SEID).Publish the context bag to the selection element identifier (SEID).

  3. Conserver le contexte dans le conteneur.Maintain the context in the bag.

    Ces tâches sont couverts par les procédures suivantes.These tasks are covered by the following procedures. Pour plus d’informations sur la fourniture de contexte, consultez programmation robuste plus loin dans cet article.For more information about providing context, see Robust Programming later in this article.

Pour créer un conteneur de contexte pour un éditeur ou un concepteurTo create a context bag for an editor or a designer

  1. Appelez QueryService sur votre IServiceProvider interface pour la SVsMonitorUserContext service.Call QueryService on your IServiceProvider interface for the SVsMonitorUserContext service.

    Un pointeur vers le IVsMonitorUserContext interface est retournée.A pointer to the IVsMonitorUserContext interface is returned.

  2. Appelez le CreateEmptyContext méthode pour créer un nouveau conteneur de contexte ou de sous-contexte.Call the CreateEmptyContext method to create a new context or subcontext bag.

    Un pointeur vers le IVsUserContext interface est retournée.A pointer to the IVsUserContext interface is returned.

  3. Appelez le AddAttribute méthode pour ajouter des attributs, les mots clés de recherche, ou F1 mots clés pour le conteneur de contexte ou de sous-contexte.Call the AddAttribute method to add attributes, lookup keywords, or F1 keywords to the context or subcontext bag.

  4. Si vous créez un conteneur de sous-contexte, appelez le AddSubcontext méthode pour lier le conteneur de sous-contexte au conteneur de contexte parent.If you are creating a subcontext bag, call the AddSubcontext method to link the subcontext bag to the parent context bag.

  5. Appelez AdviseUpdate pour recevoir une notification lorsque le aide dynamique fenêtre est sur le point de mise à jour.Call AdviseUpdate to receive notification when the Dynamic Help window is about to update.

    Avoir le aide dynamique fenêtre appeler votre éditeur lorsqu’il est prêt à mettre à jour vous donne la possibilité de retarder la modification du contexte jusqu'à ce que la mise à jour se produit.Having the Dynamic Help window call your editor when it is ready to update gives you the opportunity to delay changing the context until the update occurs. Cela peut améliorer les performances, car il permet de différer l’exécution d’algorithmes du temps jusqu'à ce que la durée d’inactivité système est disponible.Doing this can improve performance because it allows you to delay running time-consuming algorithms until system idle time is available.

Pour publier le sac de contextes vers le SEIDTo publish the context bag to the SEID

  1. Appelez QueryService sur le SVsTrackSelectionEx service pour retourner un pointeur vers le IVsTrackSelectionEx interface.Call QueryService on the SVsTrackSelectionEx service to return a pointer to the IVsTrackSelectionEx interface.

  2. Appelez OnElementValueChange, en spécifiant un identificateur d’élément (elementid paramètre) la valeur de SEID_UserContext pour indiquer que vous transmettez contexte jusqu’au niveau global.Call OnElementValueChange, specifying an element identifier (elementid parameter) value of SEID_UserContext to indicate that you are passing context to the global level.

  3. Lorsque l’éditeur ou un concepteur devient actif, les valeurs dans son IVsTrackSelectionEx objet sont propagées à la sélection globale.When the editor or designer becomes active, the values in its IVsTrackSelectionEx object are propagated to the global selection. Vous devez uniquement terminer ce processus une fois par session, puis stocker le pointeur vers le contexte global créé lorsque vous avez appelé OnElementValueChange.You only need to complete this process once per session, and then store the pointer to the global context created when you called OnElementValueChange.

Pour maintenir le sac de contextesTo maintain the context bag

  1. Implémentez IVsUserContext pour vous assurer que le aide dynamique fenêtre appelle l’éditeur ou le concepteur avant la mise à jour.Implement IVsUserContext to ensure that the Dynamic Help window calls the editor or designer before it updates.

    Pour chaque conteneur de contexte qui a appelé AdviseUpdate une fois le conteneur de contexte est créé et a implémenté IVsUserContextUpdate, les appels IDE UpdateUserContext pour notifier le fournisseur de contexte que le conteneur de contexte sera mis à jour.For each context bag that has called AdviseUpdate after the context bag is created and has implemented IVsUserContextUpdate, the IDE calls UpdateUserContext to notify the context provider that the context bag will be updated. Vous pouvez utiliser cet appel pour modifier les attributs et les mots clés dans le conteneur de contexte et dans n’importe quel conteneur de sous-contexte, avant le aide dynamique mise à jour de la fenêtre se produit.You can use this call to change the attributes and keywords in the context bag, and in any subcontext bags, before the Dynamic Help window update occurs.

  2. Appeler SetDirty sur le conteneur de contexte pour indiquer que l’éditeur ou le concepteur a nouveau contexte.Call SetDirty on the context bag to indicate that the editor or designer has new context.

    Lorsque le aide dynamique fenêtre appels UpdateUserContext pour indiquer qu’elle est mise à jour, l’éditeur ou le concepteur peut mettre à jour le contexte de manière appropriée pour le conteneur de contexte parent et n’importe quel conteneur de sous-contexte à ce moment-là.When the Dynamic Help window calls UpdateUserContext to indicate that it is updating, the editor or designer can update the context appropriately for both the parent context bag and any subcontext bags at that time.

    Note

    Le SetDirty est automatiquement défini à true chaque fois que le contexte est ajouté ou supprimé du conteneur de contexte.The SetDirty flag is automatically set to true whenever context is added or removed from the context bag. Le aide dynamique fenêtre appelle uniquement UpdateUserContext sur le conteneur de contexte si les SetDirty indicateur a la valeur true.The Dynamic Help window only calls UpdateUserContext on the context bag if the SetDirty flag is set to true. Il est réinitialisé à false après la mise à jour.It is reset to false after the update.

  3. Appelez AddAttribute pour ajouter le contexte à la collection de contexte actif ou RemoveAttribute pour supprimer le contexte.Call AddAttribute to add context to the active context collection or RemoveAttribute to remove context.

Programmation fiableRobust programming

Si vous écrivez votre propre éditeur, vous devez effectuer les trois procédures décrites dans cet article pour fournir un contexte pour l’éditeur.If you are writing your own editor, then you must complete all three of the procedures in this article to provide context for the editor.

Note

Pour activer correctement une fenêtre d’éditeur ou concepteur et vous assurer que le routage de commande est mise à jour correctement, vous devez appeler Show sur le composant pour le rendre la fenêtre de focus.To properly activate an editor or designer window and to ensure that command routing is updated properly, you must call Show on the component to make it the focus window.

Le SEID est une collection de propriétés qui changent en fonction de la sélection.The SEID is a collection of properties that change based on the selection. Informations de SEID sont disponibles via la sélection globale.SEID information is available through the global selection. La sélection globale est reliée à des événements déclenchés par le IVsTrackSelectionEx interface, et a une liste de tous les éléments qui est sélectionné (éditeur actuel, fenêtre Outil active, hiérarchie actuelle et ainsi de suite).The global selection is wired into events triggered by the IVsTrackSelectionEx interface, and has a list of everything that is selected (current editor, current tool window, current hierarchy, and so on).

Pour les éditeurs et concepteurs, dans quel contexte peut changer chaque fois que le curseur se déplace au sein d’un mot, il est inutile de mettre à jour en permanence le sac de contextes.For editors and designers, in which context can change whenever the cursor moves within a word, it is inefficient to constantly update the context bag. Pour effectuer la mise à jour plus efficace chaque fois que vous détectez le curseur se déplace dans l’éditeur ou de la fenêtre du concepteur, vous pouvez appeler SetDirty.To make updating more efficient any time you detect the cursor moving within the editor or designer window, you can call SetDirty. Cela vous permet conserver vos modifications de contexte jusqu'à ce qu’il est temps d’inactivité et de service de contexte de l’IDE envoie une notification à l’éditeur ou concepteur qui le aide dynamique mise à jour de la fenêtre.Doing this allows you to hold your context changes until there is idle time and the IDE's context service sends notification to the editor or designer that the Dynamic Help window is updating. Cette approche est utilisée dans le pour maintenir le sac de contextes procédure décrite dans cet article.This approach is used in the To maintain the context bag procedure in this article.

Après avoir entré le contexte des activités au sein de votre éditeur ou le concepteur, vous devez fournir un spécifique F1 mot clé pour permettre aux utilisateurs d’obtenir de l’aide de l’éditeur ou le Concepteur de lui-même.After providing context for activities within your editor or designer, you should provide a specific F1 keyword to allow users to get help for the editor or designer itself.

Voir aussiSee also

OnElementValueChange
AddAttribute
AdviseUpdate
RemoveAttribute
SetDirty
IVsUserContextUpdate
UpdateUserContext
Show
SVsTrackSelectionEx