Directwrite: получение высоты шрифта

Моя цель: s, чтобы я мог вычислить, сколько строк текста может поместиться в IDWriteTextLayout определенной высоты. Моя проблема: Прямо сейчас я ...

Моя цель: s, чтобы я мог вычислить, сколько строк текста может поместиться в IDWriteTextLayout определенной высоты. Моя проблема: Прямо сейчас я ...

Моя цель: Я хочу получить высоту шрифта IDWriteTextFormat, чтобы я мог рассчитать, сколько строк текста может поместиться в IDWriteTextLayout определенной высоты.

Моя проблема: Сейчас я использую этот код для вычисления видимого количества строк:

inline int kmTextCtrl::GetVisLines() const
{

    /* pTextFormat is an IDWriteTextFormat pointer, dpi_y is the desktop's vertical dpi,
       and GetHeight() returns the height (in pixels) of the render target. */
    float size = (pTextFormat->GetFontSize()/72.0f)*dpi_y;
    return (int)(GetHeight()/size);
}

Расчет кажется точным для некоторых шрифтов, но не для любого из шрифтов TrueType (например, Courier New, Arial, Times New Roman). Для этих шрифтов отображаемый текст обрезан далеко за нижней вертикальной границей целевого объекта рендеринга.

Некоторый контекст: Я создаю элемент управления буфером обратной прокрутки текста, который использует IDWriteTextLayout для помещения текста в цель рендеринга элемента управления. Я использую результат GetVisLines (), чтобы определить, сколько строк текста из кругового буфера (который хранит текст в std :: strings по строкам), чтобы вставить в макет, и воссоздавать его каждый раз, когда окно прокручивается или изменяется размер.

Это делается с использованием «собственного» Win32 API C ++.

7
задан kittykitty 8 April 2011 в 04:51
поделиться