使用 Direct2D 呈现

Direct2D 提供用于呈现文本的方法,这些文本的格式仅由 IDWriteTextFormatIDWriteTextLayout 呈现到 Direct2D 图面。

呈现 IDWriteTextFormat 描述的文本

若要使用 IDWriteTextFormat 对象呈现字符串来描述整个字符串的格式,请使用 Direct2D 提供的 ID2D1RenderTarget::D rawText 方法。

  1. 通过检索呈现区域的尺寸来定义文本布局的区域,并创建具有相同尺寸的 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_
        );
    
    
  2. 使用 ID2D1RenderTarget::D rawText 方法和 IDWriteTextFormat 对象将文本呈现到屏幕。 ID2D1RenderTarget::D rawText 方法采用以下参数:

    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

  1. Delcare D2D1_POINT_2F变量 ,并将其设置为窗口左上角。

    D2D1_POINT_2F origin = D2D1::Point2F(
        static_cast<FLOAT>(rc.left / dpiScaleX_),
        static_cast<FLOAT>(rc.top / dpiScaleY_)
        );
    
    
  2. 通过调用 Direct2D 呈现目标的 ID2D1RenderTarget::D rawTextLayout 方法并传递 IDWriteTextLayout 指针,将文本绘制到屏幕。

    pRT_->DrawTextLayout(
        origin,
        pTextLayout_,
        pBlackBrush_
        );