Wordwrap Win32

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

Использование static окна здесь не вариант, потому что static окно не сообщает мне одну важную информацию: высоту текста, нарисованного после переноса слов.

Любые идеи?

Билли3


person Billy ONeal    schedule 02.05.2009    source источник
comment
Поскольку два ответа были по существу одинаковыми, я проверил ранее опубликованный.   -  person Billy ONeal    schedule 02.05.2009


Ответы (3)


Ознакомьтесь с вызовом Win32 API DrawtextEx. Вам нужно будет передать параметр DT_CALCRECT, сообщающий Windows, что вы хотите, чтобы прямоугольник был рассчитан.

person Stephen Nutt    schedule 02.05.2009

Вы можете использовать DrawText () API с установленным флагом DT_CALCRECT. Сначала вам нужно будет выбрать правильный шрифт для HDC.

person mghie    schedule 02.05.2009

DrawTextEx() будет делать все, что вам нужно, если весь текст будет отображаться одним шрифтом.

Если вам нужно смешать шрифты, вам придется проделать эту работу самостоятельно. В этом случае вы захотите взглянуть на API, такие как GetTextMetrics() (не GetSystemMetrics()) и GetTextExtentExPoint32(), чтобы определить позиции и размеры для каждого запуска.

Если вам нужно обрабатывать сложные сценарии (например, языки с написанием справа налево и сценарии, в которых буквы меняют форму в зависимости от контекста), вам понадобится Uniscribe. Внимание: Uniscribe - мощный, но очень низкий уровень. Чтобы обернуть его интерфейсом более высокого уровня, может потребоваться много работы. Если вам нужна сложная обработка сценария, вам может быть лучше использовать элемент управления браузера.

person Adrian McCarthy    schedule 07.05.2009