質問

私は、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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top