【问题标题】:MSHTML: How can you clear the undo / redo buffer of MSHTMLMSHTML:如何清除 MSHTML 的撤消/重做缓冲区
【发布时间】:2010-09-20 22:59:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net webbrowser-control mshtml


    【解决方案1】:

    要清除 MSHTML 控件的撤消堆栈,您可以使用撤消管理器服务。
    启用和禁用 undo 服务时,undo 堆栈被清除。 要从 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 2011-03-19
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      相关资源
      最近更新 更多