[英]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.