使用 Direct2D 呈现
Direct2D 提供用于将格式仅 IDWriteTextFormat 或 IDWriteTextLayout 描述的文本呈现到 Direct2D 图面的方法。
呈现 IDWriteTextFormat 描述的文本
若要使用 IDWriteTextFormat 对象来呈现字符串以描述整个字符串的格式,请使用 Direct2D 提供的 ID2D1RenderTarget::D rawText 方法。
通过检索呈现区域的尺寸来定义文本布局的区域,并创建具有相同尺寸的 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 Layout 对象
若要使用 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_) );
通过调用 Direct2D 呈现目标的 ID2D1RenderTarget::D rawTextLayout 方法并传递 IDWriteTextLayout 指针,将文本绘制到屏幕。
pRT_->DrawTextLayout( origin, pTextLayout_, pBlackBrush_ );