首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSHTML:如何清除MSHTML的撤消/重做缓冲区

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

Stack Overflow用户
提问于 2008-11-05 20:21:48
回答 1查看 1.9K关注 0票数 1

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

这个控件管理它自己的撤销/重做堆栈。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2008-11-06 15:25:18

要清除MSHTML控件的撤消堆栈,可以使用撤消管理器服务。

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

这个问题的解决方案类似于:

代码语言:javascript
复制
    //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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/266497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档