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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top