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

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

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

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

0

Решение

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

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

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

Кстати, посмотрите Вот для альтернативного подхода

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]