我正在使用一个类似于包含COM /非托管C#控件的WebBrowser控件的MSHTML包装控件。我在编辑模式中使用这个控件,它允许应用程序的用户以WYSIWYG方式编辑HTML文档。
这个控件管理它自己的撤销/重做堆栈。
如何重置/清除它,以便用户不能重做/撤消对文档内容的更改,而只能对其进行编辑?
发布于 2008-11-06 15:25:18
要清除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
https://stackoverflow.com/questions/266497
复制相似问题