2008-11-05 5 views
1

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

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

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

ответ

3

Чтобы очистить стопку отмены элемента управления 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