0

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

一切看起来都很好。

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

4

1 回答 1

1

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

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

在此处阅读有关来自编辑控件的通知的更多信息(CRichEditCtrl 支持几乎所有与多行编辑控件一起使用的操作和通知消息,因此我提供了 CEdit 控件的链接)

顺便说一句,在这里看看另一种方法

于 2014-01-06T06:04:27.597 回答