Prend en charge plusieurs vues de DocumentSupporting Multiple Document Views

Vous pouvez fournir plusieurs vues d’un document en créant des données de document distinct et les objets de vue de document de votre éditeur.You can provide more than one view of a document by creating separate document data and document view objects for your editor. Certains cas dans lequel un affichage de document supplémentaire serait utile sont :Some cases in which an additional document view would be useful are:

  • Nouvelle prise en charge de la fenêtre : vous souhaitez que votre éditeur pour fournir plusieurs vues du même type, afin qu’un utilisateur qui possède déjà une fenêtre Ouvrir dans l’éditeur peut ouvrir une nouvelle fenêtre en sélectionnant le nouvelle fenêtre commande à partir de la fenêtre menu.New window support: You want your editor to provide two or more views of the same type, so that a user who already has a window open in the editor can open a new window by selecting the New Window command from the Window menu.

  • Formulaire et le code de prise en charge afficher : vous souhaitez que votre éditeur pour proposer des vues de différents types.Form and code view support: You want your editor to provide views of different types. Visual BasicVisual Basic, par exemple, fournit une vue de formulaire et un mode code., for example, provides both a form view and a code view.

    Pour plus d’informations, consultez la procédure CreateEditorInstance dans le fichier EditorFactory.cs dans le projet de l’éditeur personnalisé créé par le modèle de Package Visual Studio.For more information about this, see the CreateEditorInstance procedure in the EditorFactory.cs file in the custom editor project created by the Visual Studio Package Template. Pour plus d’informations sur ce projet, consultez procédure pas à pas : création d’un éditeur personnalisé.For more information about this project, see Walkthrough: Creating a Custom Editor.

Synchronisation des vuesSynchronizing Views

Lorsque vous implémentez plusieurs vues, l’objet de données de document est chargé de maintenir toutes les vues sont synchronisées avec les données.When you implement multiple views, the document data object is responsible for keeping all views synchronized with the data. Vous pouvez utiliser sur des interfaces de gestion d’événements VsTextBuffer à synchroniser plusieurs vues avec les données.You can use the event handling interfaces on VsTextBuffer to synchronize multiple views with the data.

Si vous n’utilisez pas le VsTextBuffer objet 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 du document.If you do not use the VsTextBuffer object to synchronize multiple views, then you must implement your own event system to handle changes made to the document data object. Vous pouvez utiliser différents niveaux de granularité à plusieurs vues de mise à jour.You can use different levels of granularity to keep multiple views up to date. Avec un paramètre de précision maximale, en cours de frappe dans une vue d’autres vues sont mis à jour immédiatement.With a setting of maximum granularity, as you type in one view the other views are updated immediately. Granularité minimale, autres vues ne sont pas mises à jour jusqu'à ce qu’ils sont activés.With minimum granularity, other views are not updated until they are activated.

Déterminer si des données du Document est déjà ouvertDetermining Whether Document Data is Already Open

La table du document en cours d’exécution (r & DT) dans l’environnement de développement intégré (IDE) permet de déterminer si les données d’un document sont déjà ouverts, comme indiqué dans le diagramme suivant.The running document table (RDT) in the integrated development environment (IDE) helps track whether the data for a document is already open, as shown in the following diagram.

Graphique de DocDataViewDocDataView graphic
Vues multiplesMultiple views

Par défaut, chaque vue (objet de vue de document) est contenue dans le cadre de sa propre fenêtre (IVsWindowFrame).By default, each view (document view object) is contained in its own window frame (IVsWindowFrame). Comme déjà indiqué, toutefois, les données de document peuvent être affichées dans plusieurs vues.As already noted, however, document data can be displayed in multiple views. Pour activer cette option, Visual Studio vérifie la r & DT pour déterminer si le document en question est déjà ouvert dans un éditeur.To enable this, Visual Studio checks the RDT to determine whether the document in question is already open in an editor. 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.When the IDE calls CreateEditorInstance to create the editor, a non-NULL value returned in the punkDocDataExisting parameter indicates that the document is already open in another editor. Pour plus d’informations sur les fonctions r & DT, consultez Table de documents en cours d’exécution.For more information about how the RDT functions, see Running Document Table.

Dans votre IVsEditorFactory mise en œuvre, examiner l’objet de données de document renvoyé dans punkDocDataExisting pour déterminer si les données du document sont adaptées à votre éditeur.In your IVsEditorFactory implementation, examine the document data object returned in punkDocDataExisting to determine whether the document data is appropriate for your editor. (Par exemple, uniquement les données HTML doivent être affichées par un éditeur HTML.) Si cela est approprié, puis votre fabrique d’éditeur doit fournir une deuxième vue pour les données.(For example, only HTML data should be displayed by an HTML editor.) If it is appropriate, then your editor factory should provide a second view for the data. Si le punkDocDataExisting paramètre n’est pas NULL, il est possible soit que l’objet de données de document est ouvert dans un autre éditeur ou, plus probable, que les données du document sont déjà ouverts dans une vue différente avec même l’éditeur.If the punkDocDataExisting parameter is not NULL, it is possible either that the document data object is open in another editor, or, more likely, that the document data is already open in a different view with same the editor. Si les données du document sont ouverts dans un autre éditeur votre fabrique d’éditeur ne prend pas en charge, Visual Studio ne parvient pas à ouvrir votre fabrique d’éditeur.If the document data is open in a different editor that your editor factory does not support, then Visual Studio fails to open your editor factory. Pour plus d’informations, consultez Comment : joindre des vues à des données du Document.For more information, see How to: Attach Views to Document Data.