MSHTML:如何清除MSHTML的撤消/重做缓冲区

时间:2008-11-05 20:21:48

标签: c# .net webbrowser-control mshtml

我正在使用类似于包含COM /非托管MSHTML控件的WebBrowser控件的C#包装器控件。 我在编辑模式下使用此控件,允许应用程序的用户以WYSIWYG方式编辑HTML文档。

此控件管理它自己的撤消/重做堆栈。

如何重置/清除它以便用户无法重做/撤消对文档内容的更改,但只能编辑它?

1 个答案:

答案 0 :(得分:3)

要清除MSHTML控件的撤消堆栈,您可以使用撤消管理器服务 启用和禁用撤消服务时,将清除撤消堆栈。 要从MSHTML的Document对象中提取撤消管理器,您需要使用IServiceProvider。

解决这个问题的方法有:

    //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();

更详细的实施和更多信息可以在以下网址看到:

http://postxing.net:8080/PostXING/tags/v1.1/PostXING.HtmlComponent/Html/

http://msdn.microsoft.com/en-us/library/ms678623(VS.85).aspx