Как сделать прокрутку текста в поле ввода?

Я делаю пользовательское поле редактирования, используя прямую 2D и прямую запись. Материал для рисования (коробка) выполняется прямым 2D. Я беру ввод из сообщения WM_CHAR и добавляю его в строку. Эта строка записывается в поле. Теперь проблема в том, что всякий раз, когда ввод текста превышает длину текстового поля, он автоматически прокручивается вниз, и теперь вводимый текст не отображается в текстовом поле. Так как прокрутить текст так, чтобы он всегда был в текстовом поле.

вот изображение, показывающее окно редактирования

вот изображение, которое показывает проблему

0

Решение

Я полагаю, что вы использовали ‘IDWriteTextFormat :: SetTextAlignment’, чтобы выровнять текст по центру поля макета. Точно так же вы можете использовать ‘IDWriteTextFormat :: SetParagraphAlignment’ для управления вертикальным выравниванием текста.

Но он не может сделать то, что вы назвали «текст всегда в текстовом поле». Вы должны изменить размер шрифта, чтобы он соответствовал статическому макету. «Прокрутка» не может помочь вам здесь.

0

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

Все зависит от того, что вы хотите с ним сделать и насколько сложным должен быть ваш контроль. Если ограничено отображение только одной строки, вы можете попытаться DWRITE_WORD_WRAPPING_NO_WRAP режим обтекания. Если вы хотите, чтобы он был многострочным, и вы хотите использовать только один шрифт, вы можете вычислить высоту строки один раз, затем на новой строке отобразить следующую строку вместо текущей; похоже на VK_UP например вы можете прокрутить одну строку назад. Дело в том, что с многострочным управлением естественно ожидать, что части вашего текста будут отображаться кратно высоте строки.

В любом случае вы должны осуществить прокрутку самостоятельно, например, обновление цели рендеринга и отображение только ее части за раз. Это не работа DirectWrite или D2D, чтобы сделать это.

0

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