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