fabriques d'éditeur
Une fabrique d'éditeur crée des objets d'éditeur et les place dans un frame de fenêtre, appelée vue physique. Il crée les objets de vue de données et le fichier de document qui sont nécessaires pour créer des éditeurs et les concepteurs. Une fabrique d'éditeur est requise pour créer l'éditeur principal de Visual Studio et tout éditeur standard. un éditeur personnalisé peut éventuellement être créé également avec une fabrique d'éditeur.
vous créez une fabrique d'éditeur en implémentant l'interface d' IVsEditorFactory . l'exemple suivant montre comment implémenter IVsEditorFactory pour créer une fabrique d'éditeur :
<Guid(GuidList.guidEditorFactory)> _
Public NotInheritable Class SingleViewEditorFactory
Implements IVsEditorFactory
Implements IDisposable
Private MyPackage As PackageSingleViewEditor
Private vsServiceProvider As ServiceProvider
Public Sub New(ByVal packageEditor As PackageSingleViewEditor)
Trace.WriteLine(String.Format(CultureInfo.CurrentCulture,
"Entering {0} constructor", Me.ToString()))
MyPackage = packageEditor
End Sub
#Region "IVsEditorFactorySupport"
Public Function Close() As Integer Implements VisualStudio.Shell.Interop.IVsEditorFactory.Close
Throw New NotImplementedException
End Function
Public Function CreateEditorInstance(ByVal grfCreateDoc As UInteger, ByVal pszMkDocument As String, ByVal pszPhysicalView As String, ByVal pvHier As VisualStudio.Shell.Interop.IVsHierarchy, ByVal itemid As UInteger, ByVal punkDocDataExisting As System.IntPtr, ByRef ppunkDocView As System.IntPtr, ByRef ppunkDocData As System.IntPtr, ByRef pbstrEditorCaption As String, ByRef pguidCmdUI As System.Guid, ByRef pgrfCDW As Integer) As Integer Implements VisualStudio.Shell.Interop.IVsEditorFactory.CreateEditorInstance
Throw New NotImplementedException
End Function
Public Function MapLogicalView(ByRef rguidLogicalView As System.Guid, ByRef pbstrPhysicalView As String) As Integer Implements VisualStudio.Shell.Interop.IVsEditorFactory.MapLogicalView
Throw New NotImplementedException
End Function
Public Function SetSite(ByVal psp As VisualStudio.OLE.Interop.IServiceProvider) As Integer Implements VisualStudio.Shell.Interop.IVsEditorFactory.SetSite
Throw New NotImplementedException
End Function
#End Region
#Region "IDisposable Support"
Public Sub Dispose() Implements IDisposable.Dispose
Throw New NotImplementedException
End Sub
#End Region
End Class
[Guid(GuidList.guidEditorFactory)]
public sealed class SingleViewEditorFactory : IVsEditorFactory, IDisposable
{
private PackageSingleViewEditor MyPackage;
private ServiceProvider vsServiceProvider;
public SingleViewEditorFactory(PackageSingleViewEditor packageEditor)
{
Trace.WriteLine(string.Format(CultureInfo.CurrentCulture,
"Entering {0} constructor", this.ToString()));
MyPackage = packageEditor;
}
#region "IVsEditorFactory Support"
public int Close()
{
throw new NotImplementedException();
}
public int CreateEditorInstance(uint grfCreateDoc, string pszMkDocument, string pszPhysicalView, IVsHierarchy pvHier, uint itemid, IntPtr punkDocDataExisting, out IntPtr ppunkDocView, out IntPtr ppunkDocData, out string pbstrEditorCaption, out System.Guid pguidCmdUI, out int pgrfCDW)
{
throw new NotImplementedException();
}
public int MapLogicalView(ref System.Guid rguidLogicalView, out string pbstrPhysicalView)
{
throw new NotImplementedException();
}
public int SetSite(Microsoft.VisualStudio.OLE.Interop.IServiceProvider psp)
{
throw new NotImplementedException();
}
#endregion
#region "IDisposable Support"
public void Dispose()
{
throw new NotImplementedException();
}
#endregion
}
un éditeur est chargé la première fois que vous ouvrez un type de fichier géré par cet éditeur. vous pouvez choisir d'ouvrir un éditeur spécifique ou l'éditeur par défaut. Si vous sélectionnez l'éditeur par défaut, l'environnement (IDE) IDE détermine l'éditeur approprié pour ouvrir puis l'ouvre. Pour plus d'informations, consultez Déterminer quel éditeur ouvrir un fichier dans un projet.
Stocker les fabriques d'éditeur
Avant de pouvoir utiliser un éditeur que vous avez créé, vous devez d'abord enregistrer des informations sur ce sujet, notamment les extensions de fichier qu'elles peuvent gérer.
Si votre VSPackage est écrit en code managé, vous pouvez utiliser la méthode managée RegisterEditorFactory (MPF) d'infrastructure de package pour inscrire la fabrique d'éditeur après que votre VSPackage chargé. Si votre VSPackage est écrit en code non managé, vous devez enregistrer votre fabrique d'éditeur à l'aide de le service d' SVsRegisterEditors .
Inscription d'une fabrique d'éditeur à l'aide de code managé
vous devez enregistrer votre fabrique d'éditeur dans la méthode d' Initialize de votre VSPackage. Le premier appel base.Initialize, et appelez ensuite RegisterEditorFactory pour chaque fabrique d'éditeur
En code managé, il n'y a aucun besoin d'annuler l'enregistrement d'une fabrique d'éditeur, car le VSPackage gérera cette opération pour vous. En outre, si votre fabrique d'éditeur implémente IDisposable, il est automatiquement supprimé lorsqu'il est annulé.
Inscription d'une fabrique d'éditeur à l'aide de code non managé
Dans l'implémentation d' SetSite pour votre package de l'éditeur, utilisez la méthode d' QueryService pour appeler SVsRegisterEditors. De cette façon retourne un pointeur vers IVsRegisterEditors. appelez la méthode d' RegisterEditor en passant votre implémentation de l'interface d' IVsEditorFactory . vous devez mplement IVsEditorFactory dans une classe distincte.
La procédure d'enregistrement de fabrique d'éditeur
Le processus suivant se produit lorsque Visual Studio charge votre éditeur qui utilisent votre fabrique d'éditeur :
le système de projet de Visual Studio appelle l' OpenStandardEditor.
Cette méthode retourne la fabrique d'éditeur. Visual Studio diffère charger le package de l'éditeur, toutefois, jusqu'à ce qu'un système de projet a besoin de l'éditeur.
Lorsqu'un système de projet a besoin de l'éditeur, Visual Studio appelle l' CreateEditorInstance, une méthode particulière qui retourne la vue du document et les objets de données du document.
Si les appels par Visual Studio à votre fabrique d'éditeur à l'aide de l' CreateEditorInstance retournent un objet de données du document et un objet de vue du document, Visual Studio crée la fenêtre de document, recherche l'objet de vue du document à l'intérieur, et transforme une entrée en tableau (RDT) en cours de exécution du document associé à l'objet de données du document.