共用方式為


逐步解說: 將功能加入至自訂編輯器

建立自訂編輯器之後,您可以將更多功能加入至它。

若要建立之編輯器的 VSPackage

  1. 藉由使用 Visual Studio 的套件] 專案範本建立自訂編輯器。

    如需詳細資訊,請參閱 逐步解說: 使用 Visual Studio 的封裝範本建立功能表命令

  2. 決定是否要讓您以支援單一檢視] 或 [多個檢視的編輯器。

    支援的編輯器開新視窗命令,或表單檢視] 和 [程式碼] 檢視,需要不同的文件資料物件和文件檢視物件。 支援單一檢視編輯器中,文件的資料物件和文件的 view 物件可以實作相同的物件。

    如有多個檢視範例,請參閱支援多個文件檢視

  3. 藉由實作來實作編輯器工廠IVsEditorFactory介面。

    如需詳細資訊,請參閱 編輯器工廠

  4. 決定是否要讓您使用就地啟動或簡化的嵌入來管理文件檢視 [物件] 視窗的編輯器。

    簡化的內嵌編輯器視窗會裝載標準文件] 檢視中,而在就地啟動編輯器視窗裝載 ActiveX 控制項或其文件檢視為其他作用中的物件。 如需詳細資訊,請參閱 簡化的嵌入就地啟動

  5. 實作IOleCommandTarget介面來處理命令。

  6. 提供文件的持續性和回應外部檔案變更,方法如下:

    1. 若要保存的檔案,實作IVsPersistDocData2IPersistFileFormat在編輯器的文件資料物件。

    2. 若要因應外部檔案變更,實作IVsFileChangeExIVsDocDataFileChangeControl編輯器的文件資料的物件上。

      注意事項注意事項

      呼叫QueryServiceSVsFileChangeEx以取得變數的指標, IVsFileChangeEx

  7. 協調與原始程式碼控制的文件編輯事件。 如要完成這項工作:

    1. 取得變數的指標, IVsQueryEditQuerySave2藉由呼叫QueryServiceSVsQueryEditQuerySave

    2. 第一個編輯事件發生時,呼叫QueryEditFiles方法。

      這會提示使用者簽出檔案,如果它已經不簽出。 請務必處理 「 未簽出檔案 」 條件,以防範未然錯誤

    3. 同樣地,儲存檔案之前, 呼叫QuerySaveFile方法。

      這個方法可提示使用者儲存檔案,如果尚未儲存,或是上次儲存之後檔案有所變更。

  8. 啟用屬性視窗顯示的文字編輯器] 中選取的屬性。 如要完成這項工作:

    1. 呼叫OnSelectChange每次文字選取範圍變更時,傳遞的實作中ISelectionContainer

    2. 呼叫QueryServiceSTrackSelection服務來取得變數的指標, ITrackSelection

  9. 可讓使用者拖放編輯器] 中的項目和工具箱,或在外部編輯器中 (例如 Microsoft Word) 和 工具箱。 如要完成這項工作:

    1. 實作IDropTarget上您的編輯器,以警示的 IDE 編輯器是置放目標。

    2. 實作IVsToolboxUser介面上檢視,因此可以讓您的編輯器,並將其停用中的項目工具箱

    3. 實作ResetDefaults ,並呼叫QueryServiceSVsToolbox服務來取得變數的指標, IVsToolbox2IVsToolbox3介面。

      這可讓您加入新項目 VSPackage 工具箱

  10. 決定編輯器是否需要任何選用的功能。

    • 如果您希望您的編輯器,以支援尋找和取代] 指令,而實作IVsFindTarget

    • 如果您希望您的編輯器,以支援巨集錄製時,呼叫QueryServiceSVsMacroRecorder以取得變數的指標, IVsMacroRecorder

      注意事項注意事項

      IDE 會支援巨集錄製時編輯器支援它。

    • 如果您想要使用您的編輯器中的文件大綱工具視窗,實作IVsDocOutlineProvider

    • 如果您想要使用 [程式編輯器] 中的 [狀態列] 中,實作IVsStatusbarUser ,並呼叫QueryServiceSVsStatusbar以取得變數的指標, IVsStatusBar

      比方說,編輯器可以顯示列 / 資料行資訊、 選取範圍模式 (傳送資料流 / 方塊),並插入模式 (插入 / overstrike)。

    • 如果您希望您的編輯器,以支援Undo命令,建議的方法是使用 OLE 的復原管理員模型。 或者,您可以將 [編輯器] 控點Undo命令直接。

  11. 建立登錄資訊,包括 VSPackage、 功能表、 編輯器] 中,和其他功能的 Guid。

    以下是一個泛用的範例,您會將您的.rgs 檔指令碼,來示範如何正確地登錄編輯器中的程式碼。

    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. 實作即時線上說明的支援。

    這可讓您提供 F1 說明和動態說明] 視窗支援您的編輯器中的項目。 如需詳細資訊,請參閱How to: 為編輯器提供的內容

  13. 將從您的編輯器的 Automation 物件模型公開藉由實作IDispatch介面。

    如需詳細資訊,請參閱 做為自動化模型

健全的程式設計

  • 編輯器執行個體建立時 IDE 會呼叫CreateEditorInstance方法。 如果編輯器] 中支援多個檢視、 CreateEditorInstance會同時建立文件資料和文件的檢視物件。 如果文件資料的物件已經開啟的非 null punkDocDataExisting值傳遞至IVsEditorFactory::CreateEditorInstance。 編輯器工廠實作必須決定現有的文件資料物件藉由為適當的介面,在其上查詢是否相容。 如需詳細資訊,請參閱 支援多個文件檢視

  • 如果您使用簡化的內嵌方法,實作IVsWindowPane介面。

  • 如果您決定使用就地啟動,請執行下列介面:

    IOleObject

    IOleInPlaceActiveObject

    IOleInPlaceComponent

    注意事項注意事項

    IOleInPlaceComponent介面用來避免 OLE 2 功能表合併。

    IOleCommandTarget實作處理命令類似剪下複製,以及貼上。 當實作IOleCommandTarget,決定編輯器是否需要它自己的.vsct 檔,以定義它自己的指令功能表結構,或如果它可以實作所定義的標準命令Visual Studio。 通常,編輯器使用和擴充 IDE 的功能表,然後定義自己的工具列。 不過,它通常是所需的編輯器,然後定義其本身特定的命令,除了使用 IDE 的標準命令集。 若要這樣做,您的編輯器必須宣告標準的命令使用,並接著在.vsct 檔案中定義任何新的命令、 快顯功能表、 最上層的功能表及工具列。 如果您建立就地啟動編輯器時,那麼實作IOleInPlaceComponent和.vsct 檔案,而不使用 OLE 2 功能表合併在編輯器中定義的功能表及工具列。

  • 若要防止功能表命令在 UI 中過度擁擠,您應該在 IDE 中使用現有的命令之前 ¬ 新命令。 共用的指令被定義在 SharedCmdDef.vsct 和 ShellCmdDef.vsct。 這些檔案會安裝預設的 VisualStudioIntegration\Common\Inc 子目錄中您Visual Studio SDK安裝。

  • ISelectionContainer可以用來表示單一與多重選取的項目。 每個選取的物件會實作為IDispatch物件。

  • IDE 會實作IOleUndoManager做為服務可從CreateInstance或物件,可以透過執行個體化為CreateInstance。 編輯器實作IOleUndoUnit介面,為每個Undo動作。

  • 兩個地方自訂編輯器可以公開 (expose) automation 物件:

    • Document.Object

    • Window.Object

請參閱

工作

How to: 為編輯器提供的內容

其他資源

做為自動化模型