CRichEditCtrl как редактор языка программирования с подсветкой синтаксиса: SetSelectionCharFormat, отменить

Я использую CRichEditCtrl для редактирования языка компьютера, и при каждом его изменении я изменяю CharFormat текста, чтобы выделить синтаксис. (Например: комментарии зеленого цвета, заголовки разделов более крупным шрифтом, ошибки компиляции другим шрифтом и т. Д.)

Похоже, все работает нормально.

Однако есть некоторые странные проблемы. Во-первых, буфер отмены CRichEditCtrl содержит не только пользовательские события, но и мои вызовы SetSelectionCharFormat. Например, скажем, пользователь вводит "#" в начале строки, делая эту строку комментарием. Затем программное обеспечение автоматически становится зеленым. Теперь, когда пользователь пытается ctrl-z, линия снова становится черной. Другой ctrl-z удаляет его "#". Как я могу избежать изменений SetSelectionCharFormat() от попадания в буфер отмены?

1 ответ

Я думаю, что все зависит от того, когда вы обрабатываете сообщения ввода пользователя. Если вы обрабатываете его в обработчике ON_EN_CHANGE В этом случае ваши действия будут рассматриваться как отдельный шаг и будут добавлены в буфер отмены.

Однако, если вы введете свой код в ON_EN_UPDATE обработчик, ваши действия будут добавлены к действиям пользователя и помещены в буфер отмены как один шаг.

Подробнее об уведомлениях от элементов управления редактированием читайте здесь (CRichEditCtrl поддерживает практически все операции и сообщения уведомлений, используемые с элементами управления многострочным редактированием, поэтому я предоставил ссылку для элемента управления CEdit)

Кстати, посмотрите здесь альтернативный подход

Другие вопросы по тегам