Отрисовка с помощью Direct2D
Direct2D предоставляет методы для отрисовки либо текста с форматированием, описанным только через IDWriteTextFormat, либо через IDWriteTextLayout на поверхности Direct2D.
Отрисовка текста, описанного с использованием IDWriteTextFormat
Чтобы отобразить строку с помощью объекта IDWriteTextFormat, чтобы описать форматирование всей строки, используйте метод ID2D1RenderTarget::DrawText, предоставляемый Direct2D.
Определите область для текстового макета, извлекая измерения области отрисовки и создав прямоугольник Direct2D с одинаковыми измерениями.
D2D1_RECT_F layoutRect = D2D1::RectF( static_cast<FLOAT>(rc.left) / dpiScaleX_, static_cast<FLOAT>(rc.top) / dpiScaleY_, static_cast<FLOAT>(rc.right - rc.left) / dpiScaleX_, static_cast<FLOAT>(rc.bottom - rc.top) / dpiScaleY_ );
Используйте метод ID2D1RenderTarget::DrawText и объект IDWriteTextFormat для отображения текста на экране. Метод ID2D1RenderTarget::DrawText принимает следующие параметры:
- Строка для визуализации.
- Указатель на интерфейс IDWriteTextFormat.
- Прямоугольник макета Direct2D.
- Указатель на интерфейс, предоставляющий ID2D1Brush.
pRT_->DrawText( wszText_, // The string to render. cTextLength_, // The string's length. pTextFormat_, // The text format. layoutRect, // The region of the window where the text will be rendered. pBlackBrush_ // The brush used to draw the text. );
Отрисовка объекта макета IDWriteText
Чтобы нарисовать текст с параметрами макета текста, заданными объектом IDWriteTextLayout, измените код в методе MultiformattedText::DrawText, чтобы использовать IDWriteTextLayout::DrawTextLayout.
Объявите переменную D2D1_POINT_2F и установите ее в верхнюю левую точку окна.
D2D1_POINT_2F origin = D2D1::Point2F( static_cast<FLOAT>(rc.left / dpiScaleX_), static_cast<FLOAT>(rc.top / dpiScaleY_) );
Нарисуйте текст на экране, вызвав метод ID2D1RenderTarget::DrawTextLayout целевого объекта отрисовки Direct2D и передав указатель IDWriteTextLayout.
pRT_->DrawTextLayout( origin, pTextLayout_, pBlackBrush_ );