Отрисовка с помощью Direct2D
Direct2D предоставляет методы для отрисовки текста с форматированием, описанным только IDWriteTextFormat или IDWriteTextLayout для поверхности Direct2D.
Отрисовка текста, описанного IDWriteTextFormat
Чтобы отобразить строку с помощью объекта IDWriteTextFormat для описания форматирования всей строки, используйте метод ID2D1RenderTarget::D rawText , предоставляемый 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::D rawText и объект IDWriteTextFormat для отрисовки текста на экране. Метод ID2D1RenderTarget::D rawText принимает следующие параметры:
- Строка для отрисовки.
- Указатель на интерфейс 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::D rawText, чтобы использовать IDWriteTextLayout::D rawTextLayout.
Delcare D2D1_POINT_2F переменной и задать для нее верхнюю левую точку окна.
D2D1_POINT_2F origin = D2D1::Point2F( static_cast<FLOAT>(rc.left / dpiScaleX_), static_cast<FLOAT>(rc.top / dpiScaleY_) );
Нарисуйте текст на экране, вызвав метод ID2D1RenderTarget::D rawTextLayout целевого объекта отрисовки Direct2D и передав указатель IDWriteTextLayout .
pRT_->DrawTextLayout( origin, pTextLayout_, pBlackBrush_ );