2008-11-05 35 views
1

我正在使用类似于包含COM /非托管MSHTML控件的WebBrowser控件的C#包装控件。 我在编辑模式下使用此控件,它允许应用程序的用户以所见即所得的方式编辑HTML文档。MSHTML:如何清除MSHTML的撤消/重做缓冲区

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

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

回答

3

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

的解决方案,这是某些东西一样:

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

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

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

更详细的实施,更多信息可以在可见