CRichEditCtrl作为语法高亮的编程语言编辑器:SetSelectionCharFormat,undo

时间:2014-01-02 04:19:43

标签: c++ mfc undo cricheditctrl

我正在使用CRichEditCtrl来编辑计算机语言,并且每次更改它时我都会更改文本的CharFormat以突出显示语法。 (EG:绿色注释,更大字体的章节标题,不同字体的编译错误等)

这一切看起来都很好。

然而,有一些奇怪的问题。一个是,CRichEditCtrl的撤消缓冲区不仅包含用户事件,还包含我对SetSelectionCharFormat的调用。例如,假设用户在行的开头键入“#”,使该行成为注释。然后软件自动将其变为绿色。现在,当用户尝试ctrl-z时,该行会变回黑色。另一个ctrl-z删除了他的“#”。 如何避免SetSelectionCharFormat()更改进入撤消缓冲区?

1 个答案:

答案 0 :(得分:1)

我认为这完全取决于您何时处理用户输入消息。如果您在ON_EN_CHANGE事件的处理程序中处理它,那么您的操作将被视为一个单独的步骤,并将添加到撤消缓冲区。

但是,如果您将代码放在ON_EN_UPDATE处理程序中,您的操作将被添加到用户的操作中,并作为一个步骤放入撤消缓冲区。

详细了解编辑控件here中的通知(CRichEditCtrl支持几乎所有用于多行编辑控件的操作和通知消息,因此我提供了CEdit控件的链接)

BTW,看看here替代方法