我的 Rich Edit 控件中已经有一个相当不错的语法荧光笔,但在它完全有用之前我还有一个问题:每当我运行语法着色时,它都会在撤消缓冲区中记录那些着色操作,这是我并不真正想要的。有什么方法可以暂时禁用记录撤消操作,以便在着色后用户可以按撤消,它只会撤消用户自己的操作而不是自动语法荧光笔?
不过,我认为我没有时间实现 Scintilla.NET 编辑器来解决这个问题。有什么建议么?
我的 Rich Edit 控件中已经有一个相当不错的语法荧光笔,但在它完全有用之前我还有一个问题:每当我运行语法着色时,它都会在撤消缓冲区中记录那些着色操作,这是我并不真正想要的。有什么方法可以暂时禁用记录撤消操作,以便在着色后用户可以按撤消,它只会撤消用户自己的操作而不是自动语法荧光笔?
不过,我认为我没有时间实现 Scintilla.NET 编辑器来解决这个问题。有什么建议么?
几乎就像@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 开始提供的。
您将不得不自己处理撤消/重做,而不是依赖 RTB,这意味着挂钩键盘事件以侦听 CTRL+Z 等。
您可以看到来自 codeproject 的作者是如何为类似的 RTB 覆盖的语法高亮编辑器做到这一点的:http: //www.codeproject.com/KB/edit/SyntaxHighlighting.aspx