我的Rich Edit控件中已经有了一个相当不错的syntax highlighter,但在它完全有用之前我还有一个最后的问题: 每当我运行语法着色时,它会在撤消缓冲区中记录那些着色操作,这是我真正不想要的。有没有办法暂时禁用录制撤消操作,以便在着色后用户可以按撤消,它只会撤消用户自己的操作而不是自动语法荧光笔?
我不认为我有时间实现Scintilla.NET编辑器只是为了解决这个问题。有什么建议吗?
答案 0 :(得分:1)
您必须自己处理撤消/重做,而不是依赖RTB,这意味着挂钩键盘事件以侦听CTRL + Z等。
您可以看到codeproject的作者是如何为类似的RTB重写语法高亮编辑器做的:http://www.codeproject.com/KB/edit/SyntaxHighlighting.aspx
答案 1 :(得分:1)
几乎@Karl Edwall上面说过,但并不完全:使用EM_GETOLEINTERFACE
获取IRichEditOle
界面并查询IID_ITextDocument
。
一旦你得到它,使用(而不是其他答案的冻结/解冻)Undo()
方法:
Undo(tomSuspend,NULL);
暂时暂停撤消Undo(tomResume,NULL);
再次恢复(见http://support.microsoft.com/kb/199852。) 它需要RichEdit 3.0,但是从Windows XP SP1开始发布。
答案 2 :(得分:0)
从C ++开始,你要做的就是使用IRichEditOle COM接口,例如:进入ITextDocument TOM界面并调用Freeze和Unfreeze以防止您的更改进入撤消缓冲区。也许这篇文章http://www.codeproject.com/KB/edit/richtextboxplus.aspx可以帮助我们做到这一点。