Exemplarische Vorgehensweise: Funktionen auf einen benutzerdefinierten Editor hinzu
Nachdem Sie einen benutzerdefinierten Editor erstellt haben, können Sie weitere Funktionen hinzufügen.
So erstellen Sie einen Editor für VSPackage
Erstellen Sie einen benutzerdefinierten Editor, indem Sie die Visual Studio-Paket importieren verwenden.
Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Wenn Sie einen Menübefehl mit der Visual Studio-Paket-Vorlage erstellen.
Entscheiden Sie, ob Sie den Editor eine einzelne Ansicht oder mehrere Ansichten unterstützen soll.
Ein Editor, der den Neues Fenster Befehl unterstützt, oder Formularansicht und Codeansicht, erfordert eigene Dokumenten und Dokumenten datenobjekte der Objekte. In einem Editor unterstützt nur eine einzelne Ansicht, das das angegebene Channeldatenobjekt Dokumenten und das Objekt der Dokumente können auf demselben Objekt implementiert werden.
Ein Beispiel für mehrere Ansichten finden Sie unter Unterstützung mehrerer Dokumenten-Ansichten.
Implementieren Sie eine Editorfactory, indem Sie die IVsEditorFactory-Schnittstelle implementieren.
Weitere Informationen finden Sie unter Editor-Factorys.
Entscheiden Sie, ob Sie den Editor die direkte Aktivierung oder vereinfachte Einbettung verwenden soll, um das Fenster für die Dokumente zu verwalten.
Hosts eines einbettende vereinfachte Ansicht des Editorfensters eine standardmäßige Dokumente Editor-Fensters eines Hosts, während ein ActiveX-Steuerelement Aktivierung der Symbolleiste oder ein anderes Objekt als aktive Ansicht des Dokuments. Weitere Informationen finden Sie unter Vereinfachte Einbettung und Direkte Aktivierung.
Implementieren Sie die IOleCommandTarget-Schnittstelle, um Befehle zu behandeln.
Erstellen von Dokumenten Dauerhaftigkeit und der Antwort an externe Dateiänderungen vom diese Folgendes bereit:
Um die Datei, das Implementieren IVsPersistDocData2 und IPersistFileFormat das angegebene Channeldatenobjekt des Editors im Dokument beibehalten.
Um externe Datei ändert, Implementieren und IVsFileChangeEx Dokumenten auf dem IVsDocDataFileChangeControl das angegebene Channeldatenobjekt des Editors reagieren.
Hinweis
Aufruf QueryService auf SVsFileChangeEx , um ein Zeiger auf IVsFileChangeExabzurufen.
Koordinierung von Dokumenten bearbeitungsereignisse mit Quellcodeverwaltung. Gehen Sie dazu wie folgt vor:
Abrufen eines Zeigers auf IVsQueryEditQuerySave2 , indem er QueryService auf SVsQueryEditQuerySaveaufruft.
Wenn das erste Bearbeitungsereignis auftritt, rufen Sie die QueryEditFiles-Methode veranschaulicht.
Diese fordert den Benutzer auf, die Datei ausgecheckt werden soll, wenn er noch nicht ausgecheckt ist. Stellen Sie sicher, dass Sie eine überprüfte out“ Datei „kann nicht zum Behandeln von Fehlern abzuwenden
Entsprechend bevor Sie die Datei speichern, rufen Sie die QuerySaveFile-Methode veranschaulicht.
Diese Methode fordert den Benutzer auf, um die Datei zu speichern, wenn sie nicht gespeichert wurde oder wenn sie sich seit dem letzten Speichern geändert hat.
Aktivieren Sie das Eigenschaften Fenster Eigenschaften für den Text im Editor anzeigen ausgewählt ist. Gehen Sie dazu wie folgt vor:
OnSelectChange bei jedem Aufruf simsen die Änderungen der Auswahl und in der Implementierung von ISelectionContainerübergeben.
Aufruf QueryService auf STrackSelection Dienst, auf den ein Zeiger auf ITrackSelectionabzurufen.
Aktivieren der Benutzer Drag & Drop-Elementen zwischen dem Editor, und Toolboxoder zwischen externen Editoren (z. B. Microsoft Word) und Toolbox. Gehen Sie dazu wie folgt vor:
Implementieren IDropTarget im Editor, in dem der IDE darauf hinzuweisen, dass der Editor ein Ablageziel handelt.
Implementieren Sie die IVsToolboxUser-Schnittstelle der Ansicht, sodass der Editor Elemente in Toolboxaktivieren und deaktivieren.
Implementieren Sie ResetDefaults , und rufen Sie QueryService auf SVsToolbox Dienst auf, um einen Zeiger auf den IVsToolbox2 und IVsToolbox3-Schnittstellen zu erhalten.
Dadurch kann ein VSPackage, um Toolboxneue Elemente hinzuzufügen.
Entscheiden Sie sich, ob Sie alle weiteren optionalen Funktionen für den Editor festlegen möchten.
Wenn Sie den Editor Suche unterstützen und Befehle implementieren möchten, ersetzen IVsFindTarget.
Wenn Sie den Editor Makroaufzeichnung unterstützen soll, rufen Sie QueryService für SVsMacroRecorder auf, um ein Zeiger auf IVsMacroRecorderabzurufen.
Hinweis
Die IDE unterstützt die Makroaufzeichnung, wenn der Editor dies unterstützt.
Wenn Sie ein Fenster im Editor Tool Dokumentgliederung verwenden möchten, implementieren Sie IVsDocOutlineProvider.
Wenn Sie eine Statusleiste im Editor, und IVsStatusbarUser Implementieren in QueryService im Aufruf für SVsStatusbar verwenden möchten, um einen Zeiger auf IVsStatusBarabzurufen.
Beispielsweise kann ein Editor Bildzeile/Spalteninformationen, Auswahlmodus (Stream/Feld) und Einfügemodus (Einfügung/überschreiben).
Wenn Sie den Editor den Befehl Undo unterstützen soll, ist die empfohlene Methode für das Modell verwenden OLE zum Rückgängigmachen Manager. Alternativ können Sie den Editor Undo den Befehl direkt behandeln können.
Erstellen Sie Informationen, einschließlich Registrierung VSPackages, die die GUID für den Editor, Menüs und weitere Funktionen.
Es folgt ein allgemeines Beispiel für den Code, den Sie in der RGS-Datei von Skripts einfügen würden, um zu veranschaulichen, wie Sie einen Editor ordnungsgemäß registriert.
NoRemove Editors { ForceRemove {...guidEditor...} = s 'RTF Editor' { val Package = s '{...guidVsPackage...}' ForceRemove Extensions { val rtf = d 50 } } } NoRemove Menus { val {...guidVsPackage...} = s ',203,11' }
Implementieren Sie Unterstützung der kontextbezogenen Hilfe.
Dies ermöglicht es Ihnen, F1-Hilfe und Fenster Dynamische Hilfe für Elemente im Editor zu unterstützen. Weitere Informationen hierzu finden Sie unter Gewusst wie: Bereitstellen von Kontext für Editoren bereit.
Verfügbarmachen eines Automatisierungsobjekt-Modell vom Editor, indem Sie die IDispatch-Schnittstelle implementieren.
Weitere Informationen finden Sie unter So Automatisierungs-Modell beitragen.
Stabile Programmierung
Die Instanz des Editors wird erstellt, wenn die IDE die CreateEditorInstance-Methode aufgerufen wird. Wenn der Editor mehrere Ansichten unterstützt, wird die CreateEditorInstance Dokumentdaten und die Dokumente werden. Wenn das Dokument das angegebene Channeldatenobjekt bereits geöffnet ist, wird ein Wert ungleich null punkDocDataExistingIVsEditorFactory::CreateEditorInstanceübergeben. Die Implementierung des Editors factory muss bestimmen, ob ein vorhandenes Dokument das angegebene Channeldatenobjekt kompatibel ist, indem er für die entsprechende Schnittstellen auf ihm abgefragt wird. Weitere Informationen finden Sie unter Unterstützung mehrerer Dokumenten-Ansichten.
Wenn Sie den vereinfachten Mithilfe von eingebetteten Ansatz verwenden, implementieren Sie die IVsWindowPane-Schnittstelle.
Wenn Sie direkte Aktivierung zu verwenden, implementieren Sie die folgenden Schnittstellen:
Hinweis
Die IOleInPlaceComponent-Schnittstelle wird verwendet, um das Zusammenführen von Menüs OLE 2 zu vermeiden.
Die IOleCommandTarget Implementierung Ausschneiden, wie Befehle behandelt Kopierenund Einfügen. Wenn Sie IOleCommandTargetimplementieren, entscheiden Sie, ob der Editor über eine eigene .vsct-Datei benötigt, um seine eigene Befehls oder im Menü Struktur definieren, wenn sie die Standardeinstellung kann Befehle implementieren, die von Visual Studiodefiniert sind. In der Regel erweiterte Editor verwenden und die Menüs der IDE und definiert eigene Symbolleisten. Allerdings ist es häufig notwendig für einen Editor, seine eigenen bestimmten Befehlen zusätzlich zur Verwendung des Befehls Standard festgelegten der IDE zu definieren. Dazu muss der Editor die Standardeinstellung, die er verwendet wird und dann alle neuen Befehle, definiert die Kontextmenüs, die Menüs der obersten Ebene und Symbolleisten in einer .vsct-Datei deklarieren. Wenn Sie einen Editor für die direkte Aktivierung implementieren IOleInPlaceComponent erstellen, definieren und die Menüs und Symbolleisten für den Editor in einer .vsct-Datei, anstatt das Zusammenführen von Menüs OLE 2 zu verwenden.
Um den Menübefehl zu verhindern, der in der Benutzeroberfläche drängt sich, vor der Erfindung von neuen Befehle sollten Sie die vorhandenen Befehle in der IDE verwenden. Freigegebene Befehle sind in SharedCmdDef.vsct und ShellCmdDef.vsct definiert. Diese Dateien werden standardmäßig im Unterverzeichnis \ VisualStudioIntegration Debugger der Common \ Inc. der Visual Studio SDK Installation installiert.
ISelectionContainer Mehrfachauswahl und aussondern werden kann. Jedes ausgewählte Objekt wird als IDispatch-Objekt implementiert.
Die IDE implementiert IOleUndoManager als Dienst, der von einem CreateInstance zugegriffen werden kann oder als Objekt, das von CreateInstanceinstanziiert werden kann. Der Editor IOleUndoUnit implementiert die Schnittstelle für jede Undo Aktion.
Es gibt zwei Stellen, die ein benutzerdefinierter Editor Automatisierungsobjekte verfügbar machen kann:
Document.Object
Window.Object
Siehe auch
Aufgaben
Gewusst wie: Bereitstellen von Kontext für Editoren bereit