Sdílet prostřednictvím


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

  1. 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.

  2. 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.

  3. Implementujte objekt pro vytváření editoru nastavením IVsEditorFactory rozhraní.

    Další informace najdete v tématu Továrny editoru.

  4. 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.

  5. IOleCommandTarget Implementujte rozhraní pro zpracování příkazů.

  6. Zadejte trvalost dokumentu a odpověď na změny externího souboru:

    1. Chcete-li soubor zachovat, implementujte IVsPersistDocData2 a IPersistFileFormat do datového objektu dokumentu editoru.

    2. 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 na IVsFileChangeEx.

  7. Koordinujte události úprav dokumentu pomocí ovládacího prvku zdrojového kódu. Postupujte následovně:

    1. Načíst ukazatel na IVsQueryEditQuerySave2 voláním QueryService .SVsQueryEditQuerySave

    2. Když 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.

    3. 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.

  8. Pokud chcete zobrazit vlastnosti pro text vybraný v editoru, povolte okno Vlastnosti. Postupujte následovně:

    1. Zavolat OnSelectChange pokaždé, když se změní výběr textu a předává implementaci ISelectionContainer.

    2. STrackSelection Volání QueryService služby získat ukazatel na ITrackSelection.

  9. 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ě:

    1. Implementujte IDropTarget v editoru, abyste upozorňovali integrované vývojové prostředí (IDE), které je vaším editorem cíl vyřazení.

    2. IVsToolboxUser Implementujte rozhraní v zobrazení, aby váš editor mohl povolit a zakázat položky v sadě nástrojů.

    3. 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.

  10. 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 na IVsStatusBar.

      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 zpracovat Undo příkaz přímo.

  11. 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'
    }
    
  12. 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.

  13. 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::CreateEditorInstancenení null punkDocDataExisting . 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í:

    IOleObject

    IOleInPlaceActiveObject

    IOleInPlaceComponent

    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 implementaci IOleCommandTargetse 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 jako IDispatch 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 implementuje IOleUndoUnit rozhraní pro každou Undo akci.

  • Vlastní editor může vystavit automatizační objekty dvěma způsoby:

    • Document.Object

    • Window.Object