MSHTML:MSHTMLの元に戻す/やり直しのバッファをクリアするには
-
06-07-2019 - |
質問
私は、COM /アンマネージMSHTMLコントロールを含むWebBrowserコントロールに似たC#ラッパーコントロールを使用しています。 アプリケーションのユーザーがWYSIWYG方式で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
所属していません StackOverflow