Prise en charge de vues de document multiples

Vous pouvez fournir plusieurs vues d’un document en créant des données de document et des objets de vue de document distincts pour votre éditeur. Certains cas dans lesquels une vue de document supplémentaire serait utile sont les suivants :

  • Prise en charge de la nouvelle fenêtre : vous souhaitez que votre éditeur fournisse deux vues ou plus du même type, afin qu’un utilisateur qui dispose déjà d’une fenêtre ouverte dans l’éditeur puisse ouvrir une nouvelle fenêtre en sélectionnant la commande Nouvelle fenêtre dans le menu Fenêtre .

  • Prise en charge de la vue formulaire et du code : vous souhaitez que votre éditeur fournisse des vues de différents types. Visual Basic, par exemple, fournit à la fois une vue de formulaire et une vue de code.

    Pour plus d’informations sur ce problème, consultez la procédure CreateEditorInstance dans le fichier EditorFactory.cs dans le projet d’éditeur personnalisé créé par le modèle de package Visual Studio. Pour plus d’informations sur ce projet, consultez Procédure pas à pas : création d’un éditeur personnalisé.

Synchronisation des vues

Lorsque vous implémentez plusieurs vues, l’objet de données de document est responsable de la synchronisation de toutes les vues avec les données. Vous pouvez utiliser les interfaces de gestion des événements pour VsTextBuffer synchroniser plusieurs vues avec les données.

Si vous n’utilisez pas l’objet VsTextBuffer pour synchroniser plusieurs vues, vous devez implémenter votre propre système d’événements pour gérer les modifications apportées à l’objet de données de document. Vous pouvez utiliser différents niveaux de granularité pour maintenir plusieurs vues à jour. Avec un paramètre de granularité maximale, à mesure que vous tapez dans une vue, les autres vues sont mises à jour immédiatement. Avec une granularité minimale, d’autres vues ne sont pas mises à jour tant qu’elles ne sont pas activées.

Déterminer si les données de document sont déjà ouvertes

La table de documents en cours d’exécution (RDT) dans l’environnement de développement intégré (IDE) permet de suivre si les données d’un document sont déjà ouvertes, comme illustré dans le diagramme suivant.

DocDataView graphic Affichages multiples

Par défaut, chaque affichage (objet d’affichage de document) est contenu dans son propre cadre de fenêtre (IVsWindowFrame). Comme indiqué précédemment, toutefois, les données de document peuvent être affichées dans plusieurs affichages. Pour l’activer, Visual Studio case activée le RDT pour déterminer si le document en question est déjà ouvert dans un éditeur. Lorsque l’IDE appelle CreateEditorInstance pour créer l’éditeur, une valeur non NULL retournée dans le punkDocDataExisting paramètre indique que le document est déjà ouvert dans un autre éditeur. Pour plus d’informations sur la façon dont les fonctions RDT s’affichent, consultez Exécution d’une table de documents.

Dans votre IVsEditorFactory implémentation, examinez l’objet de données de document retourné punkDocDataExisting pour déterminer si les données de document sont appropriées pour votre éditeur. (Par exemple, seules les données HTML doivent être affichées par un éditeur HTML.) S’il est approprié, votre fabrique d’éditeur doit fournir une deuxième vue pour les données. Si le punkDocDataExisting paramètre n’est pas NULL, il est possible que l’objet de données de document soit ouvert dans un autre éditeur, soit plus probablement que les données de document sont déjà ouvertes dans une autre vue avec le même éditeur. Si les données de document sont ouvertes dans un autre éditeur que votre fabrique d’éditeur ne prend pas en charge, Visual Studio ne parvient pas à ouvrir votre fabrique d’éditeur. Pour plus d’informations, consultez How to : Attach Views to Document Data.