CRichEditCtrl как редактор языка программирования с подсветкой синтаксиса: SetSelectionCharFormat, отменить
Я использую CRichEditCtrl для редактирования языка компьютера, и при каждом его изменении я изменяю CharFormat текста, чтобы выделить синтаксис. (Например: комментарии зеленого цвета, заголовки разделов более крупным шрифтом, ошибки компиляции другим шрифтом и т. Д.)
Похоже, все работает нормально.
Однако есть некоторые странные проблемы. Во-первых, буфер отмены CRichEditCtrl содержит не только пользовательские события, но и мои вызовы SetSelectionCharFormat. Например, скажем, пользователь вводит "#" в начале строки, делая эту строку комментарием. Затем программное обеспечение автоматически становится зеленым. Теперь, когда пользователь пытается ctrl-z, линия снова становится черной. Другой ctrl-z удаляет его "#". Как я могу избежать изменений SetSelectionCharFormat() от попадания в буфер отмены?
1 ответ
Я думаю, что все зависит от того, когда вы обрабатываете сообщения ввода пользователя. Если вы обрабатываете его в обработчике ON_EN_CHANGE
В этом случае ваши действия будут рассматриваться как отдельный шаг и будут добавлены в буфер отмены.
Однако, если вы введете свой код в ON_EN_UPDATE
обработчик, ваши действия будут добавлены к действиям пользователя и помещены в буфер отмены как один шаг.
Подробнее об уведомлениях от элементов управления редактированием читайте здесь (CRichEditCtrl поддерживает практически все операции и сообщения уведомлений, используемые с элементами управления многострочным редактированием, поэтому я предоставил ссылку для элемента управления CEdit)
Кстати, посмотрите здесь альтернативный подход