MSHTML: Wie kann man deaktivieren Sie die Undo / Redo-Puffer von MSHTML
-
06-07-2019 - |
Frage
Ich bin mit einer C # Wrapper Steuerung ähnlich das WebBrowser-Steuerelement, das die COM / unmanaged MSHTML-Steuerelement enthält. Ich verwende diese Steuerung in dem Bearbeitungsmodus, die der Benutzer der Anwendung ermöglicht ein ein HTML-Dokument in einer WYSIWYG Art und Weise zu bearbeiten.
Diese Steuerung verwaltet seine eigene Undo / Redo-Stack.
Wie kann ich reset / klar, so dass Benutzer nicht in der Lage sein zu wiederholen / Änderungen rückgängig macht den Inhalt des Dokuments, sondern nur in der Lage sein, es zu bearbeiten?
Lösung
Um den Rückgängig-Stapel von MSHTML Steuerung deaktivieren Sie Undo-Manager-Dienst verwenden können.
Beim Aktivieren und Deaktivieren des Undo-Dienstes wird die Undo-Liste gelöscht.
Um die Undo-Manager extrahieren aus dem Document-Objekt von MSHTML müssen Sie die IServiceProvider verwenden.
Die Lösung hierfür ist soetwas wie:
//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();
Weitere detaillierte Implementierung und weitere Informationen können eingesehen werden unter:
http://postxing.net:8080/ PostXING / tags / v1.1 / PostXING.HtmlComponent / html /
http://msdn.microsoft.com/ en-us / library / ms678623 (VS.85) aspx