How to: 為編輯器提供的內容
編輯器中,內容為使用中,只有當編輯器取得焦點或擁有焦點,焦點移至工具視窗前,立即時。 您可以提供內容的編輯器,方法如下:
建立內容包。
發行內容包選取項目識別項 (SEID)。
維護包中的內容。
下列程序會涵蓋這些工作。 如需有關如何提供內容的詳細資訊,請參閱穩固的程式設計稍後在本主題中。
若要建立內容包編輯器或設計工具
呼叫QueryService上您IServiceProvider之介面SVsMonitorUserContext服務。
變數的指標, IVsMonitorUserContext會傳回介面。
呼叫CreateEmptyContext方法,以建立新的內容或子內容包。
變數的指標, IVsUserContext會傳回介面。
呼叫AddAttribute方法,以加入內容或子內容包中的屬性、 查詢關鍵字或 F1 關鍵字。
如果您要建立子內容袋,呼叫AddSubcontext要連結的父系內容包子內容包的方法。
呼叫AdviseUpdate收到通知時動態說明視窗即將更新。
具有動態說明視窗呼叫您的編輯器時就準備好更新可讓您延後變更的內容,直到更新程式,就會發生的機會。 這樣可以改善效能,因為它可讓您延遲執行耗時的演算法,直到系統閒置時間是可用。
若要將內容包發佈到 SEID
呼叫QueryService的SVsTrackSelectionEx服務傳回的指標, IVsTrackSelectionEx介面。
呼叫OnElementValueChange,指定項目的識別項 (elementid參數) 來表示您會將內容傳遞至全域層級的 SEID_UserContext 的值。
編輯器或設計工具成為作用中時,值在其IVsTrackSelectionEx物件傳播到全域的選擇。 您只需要完成的工作階段,每一次此程序,然後再將滑鼠指標以建立當您呼叫的全域內容OnElementValueChange。
若要維護內容袋
實作IVsUserContext ,確定動態說明視窗編輯器或設計工具之前,會呼叫它會更新。
每個內容,然後按一下 [ AdviseUpdate內容包就會建立已實作後,當IVsUserContextUpdate,IDE 呼叫UpdateUserContext通知的內容提供者內容包會被更新。 您可以使用這項呼叫之前變更的屬性和關鍵字在內容包中,和任何子內容 (每袋), 動態說明視窗的更新,就會發生。
呼叫SetDirty內容包,表示編輯器或設計新的內容上。
當動態說明的視窗呼叫UpdateUserContext ,表示會在更新,、 編輯器或設計工具可以在那時更新適合的父內容包和任何子內容袋為銷售單位的內容。
注意事項 SetDirty旗標會自動設定為true每次新增或從內容包中移除內容。動態說明 ] 視窗只會呼叫UpdateUserContext內容包上如果SetDirty旗標設為true。它會重設為false之後更新。
呼叫AddAttribute將內容新增至使用中的內容集合或RemoveAttribute內容中移除。
穩固程式設計
如果您正在撰寫您自己的編輯器,您必須完成三個本主題提供的內容,讓編輯器] 中的程序。 如需詳細資訊,請參閱 Editor Design Decisions。
注意事項 |
---|
正確地啟動編輯器或設計工具] 視窗,並確定命令路由會更新正確,您必須呼叫Show ,使其焦點視窗元件上。 |
SEID 是一系列變更選取項目為基礎的屬性。 SEID 資訊是透過通用的選取項目。 全域的選擇有線網路成所觸發的事件IVsTrackSelectionEx介面,且有一份所有項目所選取 (目前的編輯器、 目前的工具視窗、 目前的階層架構,等等)。
用於編輯器和設計工具,在每次變更何種內容,可以將游標移在文字內、 不斷更新內容袋的效率較低。 若要讓您偵測到游標在編輯器或設計工具視窗內移動任何時候更新更有效率,您就可以呼叫SetDirty。 如此可讓您保留您的內容變更,直到沒有閒置時間和 IDE 的內容服務會傳送通知至編輯器或設計工具的動態說明視窗正在更新。 本主題中的 「 若要維護內容袋 」 程序會使用這種方法。
之後您的編輯器或設計工具的活動,提供內容,您必需提供一個特定的 F1 關鍵字,可讓使用者取得編輯器或設計工具本身的說明。