«Неограниченный» текст CEdit без ES_AutoHScroll - PullRequest
2 голосов
/ 30 ноября 2010

У меня возникают нежелательные рефлексы с набором ES_AUTOHSCROLL.

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

Без ES_AUTOHSCROLL пользователь не может печатать после текущего размера редактирования, поэтому мое редактирование не будет соответствовать новому символу, потому чтоввод игнорируется.

С ES_AUTOHSCROLL, когда пользователь вводит размер, превышающий текущий размер редактирования, он прокручивается первым, прежде чем я получаю шанс увеличить размер окна, поэтому я получаю первую скрытую букву, даже еслиТеперь окно достаточно велико, чтобы вместить нового персонажа.

Мое решение состояло в том, чтобы сделать мое редактирование на один символ максимальной ширины длиннее текста, который он удерживает, и это работает, потому что у вас есть место для ввода следующего символа.Однако это выглядит немного неуклюже.

Если бы был способ разрешить более широкий текст, чем ширина окна редактирования, без использования ES_AUTOHSCROLL, я бы установил.

Ответы [ 2 ]

0 голосов
/ 06 января 2011

Я нашел способ имитировать эффект, который хочу.

Я использую ES_AUTOHSCROLL.

Я отвечаю на OnUpdate и изменяю размер элемента управления, чтобы он соответствовал содержащемуся в нем тексту. Чтобы справиться с проблемой прокрутки (он прокручивает, чтобы вставить текст, прежде чем он узнает, что он станет больше), все еще внутри OnUpdate, я выбираю 0,0, а затем возвращаю предыдущий выбор. Таким образом, он прокручивает обратно в начало, а затем обновляет размер.

Таким образом, кажется, что элемент управления растет бесконечно без прокрутки.

0 голосов
/ 01 декабря 2010

Я думаю, вы также хотите использовать ES_MULTILINE

РЕДАКТИРОВАТЬ: В документации CEdit есть функция-член void CEdit::LimitText( int nChars = 0 ), которая устанавливает длину текста в UINT_MAX. Я все еще думаю, что вам также нужно использовать ES_AUTOHSCROLL (в противном случае вы получите уведомления EN_MAXTEXT, когда попытаетесь набрать текст, превышающий ширину элемента управления).

...