簡體   English   中英

MSHTML:如何清除MSHTML的撤消/重做緩沖區

[英]MSHTML: How can you clear the undo / redo buffer of MSHTML

我正在使用類似於WebBrowser控件的C#包裝器控件,其中包含COM /非托管MSHTML控件。 我在編輯模式下使用此控件,該控件允許應用程序的用戶以所見即所得的方式編輯HTML文檔。

該控件管理自己的撤消/重做堆棧。

如何重置/清除文件,使用戶無法重做/撤消對文檔內容的更改,而只能對其進行編輯?

要清除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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM