2

我的 Rich Edit 控件中已经有一个相当不错的语法荧光笔,但在它完全有用之前我还有一个问题:每当我运行语法着色时,它都会在撤消缓冲区中记录那些着色操作,这是我并不真正想要的。有什么方法可以暂时禁用记录撤消操作,以便在着色后用户可以按撤消,它只会撤消用户自己的操作而不是自动语法荧光笔?

不过,我认为我没有时间实现 Scintilla.NET 编辑器来解决这个问题。有什么建议么?

4

2 回答 2

2

几乎就像@Karl Edwall 上面所说的那样,但不完全是:EM_GETOLEINTERFACE用于获取IRichEditOle接口并查询IID_ITextDocument.

一旦你明白了,使用(而不是从另一个答案冻结/解冻)该Undo()方法:

  • Undo(tomSuspend,NULL);暂时暂停撤消
  • Undo(tomResume,NULL);再次恢复它

(请参阅http://support.microsoft.com/kb/199 ​​852。)它需要 RichEdit 3.0,但它是从 Windows XP SP1 开始提供的。

于 2014-11-27T18:36:00.380 回答
1

您将不得不自己处理撤消/重做,而不是依赖 RTB,这意味着挂钩键盘事件以侦听 CTRL+Z 等。

您可以看到来自 codeproject 的作者是如何为类似的 RTB 覆盖的语法高亮编辑器做到这一点的:http: //www.codeproject.com/KB/edit/SyntaxHighlighting.aspx

于 2010-11-09T22:44:42.127 回答