c++ - CRichEditCtrl 作为语法高亮编程语言编辑器 : SetSelectionCharFormat, 撤消

标签 c++ mfc undo cricheditctrl

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

看起来一切正常。

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

最佳答案

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

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

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

顺便说一句,看看here另一种方法

关于c++ - CRichEditCtrl 作为语法高亮编程语言编辑器 : SetSelectionCharFormat, 撤消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20876278/

相关文章:

c++ - llvm builder 向基本 block 添加终止符

c++ - CListCtrl 多次显示插入的项目

c++ - 为 MFC 界面开发自动翻译

iphone - NSUndoManager 撤消不使用核心数据

Java在替换(不更改)对象时自动更新所有引用?

c++ - 生成随机数对以形成二维随机点

c++ - 函数指针的静态映射

c++ - 迂腐的 gcc 警告 : type qualifiers on function return type

visual-studio-2010 - SendMessage 和 PostMessage 哪个更好用?

vba - Excel VB 错误 Application.Undo & ActiveSheet.Protect