DirectWrite выравнивание текста по центру

Я пытаюсь выровнять по центру текст, который я должен нарисовать. Я использую ID2D1RenderTarget::DrawTextLayout метод. Проблема заключается в том, что если я устанавливаю для горизонтального выравнивания текста значение DWRITE_TEXT_ALIGNMENT_LEADING (значение по умолчанию), текст отрисовывается корректно, но если я изменяю это значение на DWRITE_TEXT_ALIGNMENT_CENTER, текст смещается вправо.

Строка примера

Internal Amazing 
Scupper

Ниже приведены результаты (первый — выравнивание ведущих):

введите здесь описание изображениявведите здесь описание изображения


person Nick    schedule 18.06.2015    source источник
comment
Просто быстрое предположение: вы проверили, что максимальная ширина вашего поля макета не слишком широка, чтобы центр заканчивался там справа?   -  person Gnietschow    schedule 18.06.2015
comment
@Gnietschow, как я могу установить максимальный размер моего поля макета равным площади прямоугольника, содержащего мой текст? То есть, как я могу получить границы моей текстовой области?   -  person Nick    schedule 19.06.2015
comment
@Gnietschow Кстати, ваш комментарий правильный, пожалуйста, напишите свой ответ.   -  person Nick    schedule 19.06.2015
comment
Я не очень хорошо знаком с прямой записью, но кажется, что вы можете вычислить минимальную ширину, необходимую вашему тексту, с помощью метода DetermineMinWidth (msdn.microsoft.com/en-us/library/windows/desktop/) вашего IDWriteTextLayout.   -  person Gnietschow    schedule 19.06.2015


Ответы (1)


Мой комментарий в качестве ответа (да, угадал :)):

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

Метод IDWriteTextLayout, используемый методом ID2D1RenderTarget::DrawTextLayout, определяет максимальную ширину поля макета, которая определяет центрирование текста. Им можно управлять с помощью методов интерфейса (GetMaxWidth и SetMaxWidth< /а>).

person Gnietschow    schedule 19.06.2015
comment
Кроме того, ширина является параметром при первом вызове CreateTextLayout. - person Dwayne Robinson; 02.07.2015