MSHTML: Как очистить буфер отмены / повтора MSHTML? - PullRequest
1 голос
/ 05 ноября 2008

Я использую элемент управления оболочки C #, аналогичный элементу управления WebBrowser, который содержит элемент управления COM / неуправляемый MSHTML. Я использую этот элемент управления в режиме редактирования, который позволяет пользователю приложения редактировать документ HTML способом WYSIWYG.

Этот элемент управления управляет собственным стеком отмены / повтора.

Как я могу сбросить / очистить его, чтобы пользователь не мог отменить / отменить изменения в содержимом документа, но только смог отредактировать его?

1 Ответ

3 голосов
/ 06 ноября 2008

Чтобы очистить стек отмены элемента управления MSHTML, вы можете использовать службу менеджера отмены.
При включении и отключении службы отмены стек отмены очищается. Чтобы извлечь диспетчер отмены из объекта Document MSHTML, вам нужно использовать 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

...