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 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 procédant comme suit :You can provide context for an editor by doing the following:

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

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

  3. Mettre à jour 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 cette rubrique.For more information about providing context, see Robust Programming later in this topic.

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 de l’interface pour le 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 pour créer un conteneur de contexte ou sous-contexte nouvelle méthode.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, des mots clés de recherche ou des mots clés F1 pour le conteneur de contexte ou 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 sous-contexte, appelez le AddSubcontext méthode pour lier le sac sous-contexte pour le 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.

    Ayant la aide dynamique fenêtre appeler votre éditeur lorsqu’il est prêt à mettre à jour vous permet 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 des algorithmes qui prennent du temps, jusqu'à ce que la durée d’inactivité système n’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 conteneur de contexte pour le SEIDTo publish the context bag to the SEID

  1. Appelez QueryService sur la 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 de l’élément (elementid paramètre) la valeur de SEID_UserContext pour indiquer que vous passez un contexte 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 du 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 mettre à jour le conteneur de contexteTo 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 qu’il a implémenté IVsUserContextUpdate, les appels IDE UpdateUserContext pour notifier le fournisseur de contexte que le conteneur de contexte sera mise à 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 des sachets sous-contexte d’avant la aide dynamique mise à jour de la fenêtre.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 du 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 appelle 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 les conteneurs 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 retiré le sac de contextes.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 est défini à 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 cette rubrique 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 topic 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 mis à jour correctement, vous devez appeler Show sur le composant pour 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. SEID informations sont disponibles via la sélection globale.SEID information is available through the global selection. La sélection globale est câblée dans les é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 le contexte peut changer chaque fois que le curseur se déplace dans un mot, il est inutile d’actualiser 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 permet de conserver vos changements de contexte jusqu'à ce qu’il est temps d’inactivité et le service de contexte de l’IDE envoie une notification à l’éditeur ou du 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 la procédure « pour mettre à jour le conteneur de contexte » dans cette rubrique.This approach is used in the "To maintain the context bag" procedure in this topic.

Après avoir entré le contexte des activités au sein de votre éditeur ou du concepteur, vous devez fournir un mot-clé F1 pour permettre aux utilisateurs d’obtenir de l’aide de l’éditeur ou du concepteur 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