Como: implementar o gerenciamento de desfazer
A interface principal usada para o gerenciamento de desfazer é IOleUndoManager, que é implementado pelo ambiente. Suporte ao gerenciamento de desfazer, implementar unidades separada Desfazer (ou seja, IOleUndoUnit, que pode conter várias etapas individuais.
Como você pode implementar o gerenciamento de desfazer varia dependendo se o seu editor suporta vários modos de exibição ou não. Os procedimentos para cada implementação são detalhados nas seções a seguir.
Casos onde um editor oferece suporte a um único modo de exibição
Nesse cenário, o editor não suporta vários modos de exibição. Há apenas um editor e um documento e dão suporte a desfazer. Use o procedimento a seguir para implementar o gerenciamento de desfazer.
Para oferecer suporte a gerenciamento de desfazer para um editor de exibição único
Chamar QueryInterface sobre o IServiceProvider interface na moldura da janela para IOleUndoManager, do objeto de visualização de documento para acessar o Gerenciador de desfazer (IID_IOLEUndoManager).
Quando um modo de exibição é localizado em um quadro de janela, ele obtém um ponteiro de site, que pode ser usada para chamar QueryInterface para IServiceProvider.
Casos onde um editor suporta vários modos de exibição
Se você tiver um documento e exibição de separação, há normalmente uma operação desfazer o Gerenciador associado ao próprio documento. Todas as unidades de desfazer são colocadas no Gerenciador de desfazer de um associado com o objeto de dados do documento.
Chamadas de objeto em vez da consulta de modo de exibição para o Gerenciador de desfazer, dos quais existe um para cada modo de exibição, os dados dos documentos CreateInstance para instanciar o Gerenciador de desfazer, especificando um identificador de classe de CLSID_OLEUndoManager. O identificador de classe é definido no arquivo OCUNDOID.h.
Ao usar o CreateInstance para criar sua própria instância do Gerenciador de desfazer, use o seguinte procedimento para capturar seu Gerenciador de desfazer no ambiente.
Para conectar seu Gerenciador de desfazer no ambiente
Chame QueryInterface no objeto retornado de ILocalRegistry2 para IID_IOleUndoManager. Armazenar o ponteiro para IOleUndoManager.
Call QueryInterface on IOleUndoManager for IID_IOleCommandTarget. Armazenar o ponteiro para IOleCommandTarget.
Retransmissão seu QueryStatus e Exec chamadas para o armazenado IOleCommandTarget interface para os seguintes comandos de StandardCommandSet97:
cmdidUndo
cmdidMultiLevelUndo
cmdidRedo
cmdidMultiLevelRedo
cmdidMultiLevelUndoList
cmdidMultiLevelRedoList
Call QueryInterface on IOleUndoManager for IID_IVsChangeTrackingUndoManager. Armazenar o ponteiro para IVsChangeTrackingUndoManager.
Use o ponteiro para IVsChangeTrackingUndoManager para chamar o MarkCleanState, o AdviseTrackingCliente o UnadviseTrackingClient métodos.
Call QueryInterface on IOleUndoManager for IID_IVsLinkCapableUndoManager.
Chame AdviseLinkedUndoClient com o seu documento, que também deve implementar a IVsLinkedUndoClient interface. Quando o documento é fechado, chame IVsLinkCapableUndoManager::UnadviseLinkedUndoClient.
Quando o documento é fechado, chame QueryInterface em seu Gerenciador de desfazer para IID_IVsLifetimeControlledObject.
Call SeverReferencesToOwner.
Quando forem feitas alterações no documento, chame Add no Gerenciador de com um OleUndoUnit classe. O Add método mantém uma referência ao objeto, geralmente você liberá-lo à direita após o Add.
O OleUndoManager classe representa uma instância da pilha de desfazer única. Portanto, é um objeto do Gerenciador de desfazer por entidade de dados sendo controlada para desfazer ou refazer.
Dica
Enquanto o objeto do Gerenciador de desfazer for usado pelo editor de texto, ele é um componente geral que não possui nenhum suporte específico para o editor de texto.Se você deseja oferecer suporte a vários níveis desfazer ou refazer, você pode usar esse objeto para fazer isso.
Consulte também
Tarefas
Como: limpar a pilha de desfazer