MSHTML: Como você pode limpar o buffer undo / redo de MSHTML
-
06-07-2019 - |
Pergunta
Eu estou usando um C # controle de invólucro semelhante ao controle WebBrowser que contém o / controle MSHTML não gerenciado COM. Estou usando este controle no modo de edição que permite que o usuário do aplicativo para editar um documento HTML de uma forma WYSIWYG.
Este controle gerencia a sua própria pilha de desfazer / refazer.
Como posso redefinir / limpá-la de modo que o usuário não será capaz de refazer / desfazer alterações no conteúdo do documento, mas só será capaz de editá-lo?
Solução
Para limpar a pilha de desfazer do controle MSHTML pode utilizar undo serviço gerente.
Quando ativar e desativar o serviço de desfazer, a pilha de desfazer está desmarcada.
Para extrair o gerenciador de reversão para fora do objeto Document de MSHTML você precisa usar o IServiceProvider.
A solução para isso é alguma coisa como:
//Extract undo manager
if (m_undoManager == null)
{
IServiceProvider serviceProvider = Document as IServiceProvider;
Guid undoManagerGuid = typeof(IOleUndoManager).GUID;
Guid undoManagerGuid2 = typeof(IOleUndoManager).GUID;
IntPtr undoManagerPtr = ComSupport.NullIntPtr;
int hr = serviceProvider.QueryService(ref undoManagerGuid2, ref undoManagerGuid, out undoManagerPtr);
if ((hr == HRESULT.S_OK) && (undoManagerPtr != ComSupport.NullIntPtr))
{
m_undoManager = (IOleUndoManager)Marshal.GetObjectForIUnknown(undoManagerPtr);
Marshal.Release(undoManagerPtr);
}
}
//And to clear the stack
m_undoManager.Enable(true);
Application.DoEvents();
Uma implementação mais detalhada e mais informações podem ser vistos em:
http://postxing.net:8080/ PostXING / tags / v1.1 / PostXING.HtmlComponent / html /
http://msdn.microsoft.com/ en-us / library / ms678623 (VS.85) .aspx