CRichEditCtrl::LimitText - проблемы с новыми строками

У меня есть текстовое поле БД, размер 500, связанный с диалоговым полем MFC с помощью CRichEditCtrl, Я звоню CRichEditCtrl::LimitText(500) таким образом, вы не можете ввести больше текста, чем может обработать БД, и это прекрасно работает, пока вы не введете новые строки. Каждая новая строка увеличивает длину строки на 2, но считается только как 1 по отношению к пределу 500... например, если я заполнил элемент управления редактирования до предела и получу 4 новые строки, CString имеет длину 504.

Я специально хочу, чтобы элемент управления позволял пользователю только вводить текст до предела в 500 символов, а не обрезать то, что он вводит. Как я могу лучше всего достичь этого? Обратите внимание, мне нужно сохранить содержимое CString как есть, без замены \r\n с \n в БД или что-то в этом роде.

1 ответ

Решение

Затирать OnChar, посчитайте количество новых строк в тексте и затем установите ctrl.LimitText(500 - count), Таким образом, вы не будете нарушать лимит БД 500 символов.

Вы также должны следить за событиями вставки, которые могут нарушить предел, как описано здесь: Как CRichEditCtrl узнает, что была выполнена операция вставки?

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