Návod: Přidání funkcí do vlastního editoru
Po vytvoření vlastního editoru do něj můžete přidat další funkce.
Vytvoření editoru pro balíček VSPackage
Vytvořte vlastní editor pomocí šablony projektu balíčku sady Visual Studio.
Další informace naleznete v tématu Návod: Vytvoření vlastního editoru.
Rozhodněte se, jestli má váš editor podporovat jedno zobrazení nebo více zobrazení.
Editor, který podporuje příkaz Nové okno nebo má zobrazení formuláře a zobrazení kódu, vyžaduje samostatné datové objekty dokumentu a objekty zobrazení dokumentu. V editoru, který podporuje pouze jedno zobrazení, je možné do stejného objektu implementovat datový objekt dokumentu a objekt zobrazení dokumentu.
Příklad více zobrazení najdete v tématu Podpora více zobrazení dokumentu.
Implementujte objekt pro vytváření editoru nastavením IVsEditorFactory rozhraní.
Další informace najdete v tématu Továrny editoru.
Rozhodněte se, jestli má editor používat místní aktivaci nebo zjednodušené vkládání pro správu okna objektu zobrazení dokumentu.
Zjednodušené okno editoru pro vložení hostuje standardní zobrazení dokumentu, zatímco místní okno editoru aktivace hostuje ovládací prvek technologie ActiveX nebo jiný aktivní objekt jako zobrazení dokumentu. Další informace najdete v tématu Zjednodušené vkládání a místní aktivace.
IOleCommandTarget Implementujte rozhraní pro zpracování příkazů.
Zadejte trvalost dokumentu a odpověď na změny externího souboru:
Chcete-li soubor zachovat, implementujte IVsPersistDocData2 a IPersistFileFormat do datového objektu dokumentu editoru.
Pokud chcete reagovat na změny externího souboru, implementujte IVsFileChangeEx a IVsDocDataFileChangeControl do datového objektu dokumentu editoru.
Poznámka:
Voláním
QueryService
SVsFileChangeEx získáte ukazatel naIVsFileChangeEx
.
Koordinujte události úprav dokumentu pomocí ovládacího prvku zdrojového kódu. Postupujte následovně:
Načíst ukazatel na
IVsQueryEditQuerySave2
volánímQueryService
.SVsQueryEditQuerySaveKdyž dojde k první události úprav, zavolejte metodu QueryEditFiles .
Tato metoda vyzve uživatele, aby si soubor rezervoval, pokud ještě není rezervovaný. Nezapomeňte zpracovat podmínku soubor, který není rezervovaný, aby se chyby převrátily.
Podobně před uložením souboru zavolejte metodu QuerySaveFile .
Tato metoda vyzve uživatele, aby soubor uložil, pokud nebyl uložen nebo pokud se od posledního uložení změnil.
Pokud chcete zobrazit vlastnosti pro text vybraný v editoru, povolte okno Vlastnosti. Postupujte následovně:
Zavolat OnSelectChange pokaždé, když se změní výběr textu a předává implementaci ISelectionContainer.
STrackSelection Volání
QueryService
služby získat ukazatel na ITrackSelection.
Umožňuje uživatelům přetahovat položky mezi editorem a panelem nástrojů nebo mezi externími editory (jako je Microsoft Word) a panelem nástrojů. Postupujte následovně:
Implementujte
IDropTarget
v editoru, abyste upozorňovali integrované vývojové prostředí (IDE), které je vaším editorem cíl vyřazení.IVsToolboxUser Implementujte rozhraní v zobrazení, aby váš editor mohl povolit a zakázat položky v sadě nástrojů.
Implementujte ResetDefaults službu a volejte
QueryService
ji SVsToolbox , abyste získali ukazatel na IVsToolbox2 rozhraní a IVsToolbox3 rozhraní.Pomocí těchto kroků můžete balíček VSPackage přidat do sady nástrojů nové položky.
Rozhodněte se, jestli chcete pro svůj editor použít nějaké další volitelné funkce.
Pokud chcete, aby editor podporoval příkazy najít a nahradit, implementujte IVsFindTarget.
Pokud chcete v editoru použít okno nástroje osnovy dokumentu, implementujte
IVsDocOutlineProvider
.Pokud chcete použít stavový řádek v editoru, implementujte IVsStatusbarUser a volejte
QueryService
SVsStatusbar , abyste získali ukazatel naIVsStatusBar
.Editor může například zobrazit informace o řádku nebo sloupci, režim výběru (stream / box) a režim vložení (vložení / přestrike).
Pokud chcete, aby editor podporoval
Undo
příkaz, doporučujeme použít model správce zpět OLE. Jako alternativu můžete editor zpracovatUndo
příkaz přímo.
Vytvořte informace o registru, včetně identifikátorů GUID pro balíček VSPackage, nabídek, editoru a dalších funkcí.
Následuje obecný příklad kódu, který byste umístili do skriptu souboru .rgs , který ukazuje, jak správně zaregistrovat editor.
NoRemove Editors { ForceRemove {...guidEditor...} = s 'RTF Editor' { val Package = s '{...guidVsPackage...}' ForceRemove Extensions { val rtf = d 50 } } } NoRemove Menus { val {...guidVsPackage...} = s ',203,11' }
Implementace podpory nápovědy citlivé na kontext
Tento krok vám umožní poskytnout podporu okna nápovědy f1 a dynamické nápovědy pro položky v editoru. Další informace naleznete v tématu Postupy: Poskytnutí kontextu pro editory.
Zpřístupněte objektový model automatizace z editoru
IDispatch
implementací rozhraní.Další informace najdete v tématu Přehled modelu Automation.
Robustní programování
Instance editoru se vytvoří při volání integrovaného vývojového prostředí (IDE) metodu CreateEditorInstance . Pokud editor podporuje více zobrazení,
CreateEditorInstance
vytvoří data dokumentu i objekty zobrazení dokumentu. Pokud je datový objekt dokumentu již otevřen, je předána hodnota, kteráIVsEditorFactory::CreateEditorInstance
není nullpunkDocDataExisting
. Implementace objektu pro vytváření editoru musí určit, jestli je existující datový objekt dokumentu kompatibilní pomocí dotazu na příslušná rozhraní. Další informace naleznete v tématu Podpora více zobrazení dokumentů.Pokud používáte zjednodušený přístup pro vkládání, implementujte IVsWindowPane rozhraní.
Pokud se rozhodnete použít místní aktivaci, implementujte následující rozhraní:
Poznámka:
Rozhraní
IOleInPlaceComponent
se používá k zabránění sloučení nabídky OLE 2.Vaše
IOleCommandTarget
implementace zpracovává příkazy, jako jsou vyjmutí, kopírování a vložení. Při implementaciIOleCommandTarget
se rozhodněte, jestli váš editor vyžaduje vlastní soubor .vsct k definování vlastní struktury nabídky příkazů nebo jestli může implementovat standardní příkazy definované sadou Visual Studio. Editory obvykle používají a rozšiřují nabídky integrovaného vývojového prostředí a definují vlastní panely nástrojů. Často je ale nutné, aby editor kromě standardní sady příkazů integrovaného vývojového prostředí definoval i vlastní konkrétní příkazy. Váš editor musí deklarovat standardní příkazy, které používá, a pak definovat všechny nové příkazy, místní nabídky, nabídky nejvyšší úrovně a panely nástrojů v souboru .vsct . Pokud vytvoříte místní aktivační editor, implementujte a definujte IOleInPlaceComponent nabídky a panely nástrojů pro editor v souboru .vsct namísto slučování nabídek OLE 2.Pokud chcete zabránit přeplnění příkazů nabídky v uživatelském rozhraní, měli byste před vynalézáním nových příkazů použít existující příkazy v integrovaném vývojovém prostředí( IDE). Sdílené příkazy jsou definovány v SharedCmdDef.vsct a ShellCmdDef.vsct. Tyto soubory jsou ve výchozím nastavení nainstalovány v podadresáři VisualStudioIntegration\Common\Inc instalace sady Visual Studio SDK.
ISelectionContainer
může vyjádřit jeden i více výběrů. Každý vybraný objekt je implementován jakoIDispatch
objekt.Integrované vývojové prostředí (IDE) implementuje
IOleUndoManager
jako službu přístupnou z objektu nebo objektu CreateInstance , který lze vytvořit prostřednictvím CreateInstanceinstance . Váš editor implementujeIOleUndoUnit
rozhraní pro každouUndo
akci.Vlastní editor může vystavit automatizační objekty dvěma způsoby:
Document.Object
Window.Object