共用方式為


How to: 實作復原管理

用來進行復原管理的主要介面是IOleUndoManager,這由環境所實作。 若要支援復原管理,實作不同的復原單位 (也就是IOleUndoUnit,其中可包含多個個別的步驟。

實作復原管理的方式視您的編輯器是否支援多重檢視而異。 以下各節會詳細說明每一個實作的程序。

在編輯器可支援單一檢視的情況下

在這個案例中,編輯器不支援多個檢視。 只有一個編輯器和一份文件,以及它們支援復原。 使用下列程序來實作復原管理。

若要支援單一檢視編輯器的 [復原管理

  1. 呼叫QueryInterfaceIServiceProvider介面上的視窗框架IOleUndoManager,若要存取復原管理員於文件檢視物件 (IID_IOLEUndoManager)。

  2. 當檢視已決定位置到視窗外框時,它會取得站台的指標,它可以用它來呼叫QueryInterfaceIServiceProvider

在編輯器可支援多個檢視的情況下

如果您有文件和檢視的分離,則通常有一個復原文件本身相關聯的管理員。 所有的復原單位會放在文件的資料物件相關聯的一個復原管理員。

復原管理員,其中還有另一個則用於每個檢視中,檢視查詢而非文件資料的物件呼叫CreateInstance來具現化復原管理員,指定的 CLSID_OLEUndoManager 類別識別項。 OCUNDOID.h 檔案中定義的類別識別項。

當使用CreateInstance來建立您自己的復原管理員執行個體,請使用下列步驟來連結到環境的復原管理員。

若要復原管理員與檔案相連的環境

  1. 呼叫QueryInterface所傳回的物件上ILocalRegistry2的IID_IOleUndoManager。 儲存滑鼠指標以IOleUndoManager

  2. Call QueryInterface on IOleUndoManager for IID_IOleCommandTarget. 儲存滑鼠指標以IOleCommandTarget

  3. 轉送您QueryStatusExec呼叫預存IOleCommandTarget下列 StandardCommandSet97 命令介面:

    • cmdidUndo

    • cmdidMultiLevelUndo

    • cmdidRedo

    • cmdidMultiLevelRedo

    • cmdidMultiLevelUndoList

    • cmdidMultiLevelRedoList

  4. Call QueryInterface on IOleUndoManager for IID_IVsChangeTrackingUndoManager. 儲存滑鼠指標以IVsChangeTrackingUndoManager

    使用滑鼠指標以IVsChangeTrackingUndoManager呼叫MarkCleanStateAdviseTrackingClient,以及UnadviseTrackingClient方法。

  5. Call QueryInterface on IOleUndoManager for IID_IVsLinkCapableUndoManager.

  6. 呼叫AdviseLinkedUndoClient與您的文件,它也應該實作IVsLinkedUndoClient介面。 您的文件關閉時,呼叫IVsLinkCapableUndoManager::UnadviseLinkedUndoClient

  7. 您的文件關閉時,呼叫QueryInterface上為您復原管理員IID_IVsLifetimeControlledObject。

  8. 請呼叫 SeverReferencesToOwner

  9. 當文件進行變更,會呼叫Add上的管理員OleUndoUnit類別。 Add方法保留物件參考,因此通常您在放開右後Add

OleUndoManager類別代表單一的復原堆疊的執行個體。 因此,為每個正在追蹤復原或取消復原的資料實體的一個復原管理員物件。

注意事項注意事項

復原管理員物件會廣泛地使用文字編輯器,則沒有特定的支援,讓文字編輯器] 的一般元件。如果您想要支援多層級的復原或取消復原,您可以使用這個物件,若要執行這項操作。

請參閱

工作

How to: 清除復原堆疊

參考

IVsChangeTrackingUndoManager

IVsLifetimeControlledObject