Cómo: Administración de deshacer de implementan
La interfaz principal utilizada para la administración de deshacer es IOleUndoManager, que el entorno. Para admitir la administración de deshacer, unidades independientes de deshacer de implementan (es decir, IOleUndoUnit, que pueden contener pasos individuales.
Cómo se implementa la administración de deshacer varía dependiendo de si el editor admite varias vistas o no. Procedimientos para cada implementación se detallan en las secciones siguientes.
casos donde un editor admite una vista única
En este escenario, el editor no admite varias vistas. Hay solo un editor y un documento, y admiten deshacer. Use el procedimiento siguiente para implementar la administración de deshacer.
Para admitir la administración de deshacer para un editor en la vista única
Llame a QueryInterface en la interfaz de IServiceProvider en el marco de la ventana para IOleUndoManager, objetos de vista del documento para tener acceso al administrador de deshacer (IID_IOLEUndoManager).
Cuando una vista se encuentra en un marco de ventana, obtiene un puntero de sitio, que puede utilizar para llamar a QueryInterface para IServiceProvider.
Casos donde un editor admite varias vistas
Si tiene documento y separación de la vista, hay normalmente un administrador de deshacer asociado al documento propiamente dicho. Todas las unidades de deshacer se colocan en un administrador de deshacer asociado con el objeto del documento.
En lugar de la vista de consulta para el administrador de deshacer, cuyo hay uno para cada vista, el objeto del documento llama CreateInstance para crear una instancia del administrador de deshacer, especificando un identificador de clase de CLSID_OLEUndoManager. El identificador de clase se define en el archivo de OCUNDOID.h.
Al utilizar CreateInstance para crear dispone de la instancia del administrador de deshacer, utilice el siguiente procedimiento enlazar el administrador de deshacer en el entorno.
Enlazar el administrador de deshacer en el entorno
Llame a QueryInterface en el objeto devuelto de ILocalRegistry2 para IID_IOleUndoManager. almacene el puntero a IOleUndoManager.
Llame a QueryInterface en IOleUndoManager para IID_IOleCommandTarget. almacene el puntero a IOleCommandTarget.
Retransmitir el QueryStatus y las llamadas de Exec en la interfaz almacenada de IOleCommandTarget para los siguientes comandos StandardCommandSet97:
cmdidUndo
cmdidMultiLevelUndo
cmdidRedo
cmdidMultiLevelRedo
cmdidMultiLevelUndoList
cmdidMultiLevelRedoList
llamada QueryInterface en IOleUndoManager para IID_IVsChangeTrackingUndoManager. almacene el puntero a IVsChangeTrackingUndoManager.
Utilice el puntero a IVsChangeTrackingUndoManager para llamar a MarkCleanState, el AdviseTrackingClient, y los métodos de UnadviseTrackingClient .
llamada QueryInterface en IOleUndoManager para IID_IVsLinkCapableUndoManager.
Llame al AdviseLinkedUndoClient con el documento, que también debe implementar la interfaz de IVsLinkedUndoClient . Cuando se cierra el documento, llame a IVsLinkCapableUndoManager::UnadviseLinkedUndoClient.
Cuando se cierra el documento, llame a QueryInterface en el administrador de deshacer para IID_IVsLifetimeControlledObject.
Llamar a SeverReferencesToOwner.
Cuando se realizan cambios en el documento, llame a Add en el administrador con una clase de OleUndoUnit . El método de Add mantiene una referencia al objeto, por lo que normalmente se versión él justo después de Add.
La clase de OleUndoManager representa una instancia única de la pila de deshacer. Así, hay un objeto de administrador de deshacer por entidad de datos que va seguida para deshacer o rehacer.
Nota |
---|
Mientras que el objeto de administrador de deshacer se usa ampliamente en el editor de texto, es un componente general que no tiene compatibilidad concreto para el editor de texto.Si desea admitir deshacer o rehacer de varios niveles, puede utilizar este objeto para ello. |
Vea también
Tareas
Cómo: Desactive la pila de deshacer