Sdílet prostřednictvím


Vykreslení pomocí Direct2D

Direct2D poskytuje metody pro vykreslení textu s formátováním, které popisuje pouze IDWriteTextFormat nebo IDWriteTextLayout na povrch Direct2D.

Vykreslování textu popsaného uživatelem IDWriteTextFormat

Chcete-li vykreslit řetězec pomocí objektu IDWriteTextFormat popisujícího formátování celého řetězce, použijte metodu ID2D1RenderTarget::DrawText poskytovanou Direct2D.

  1. Definujte oblast rozložení textu načtením dimenzí vykreslovací oblasti a vytvořte direct2D obdélník se stejnými rozměry.

    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. K vykreslení textu na obrazovku použijte metodu ID2D1RenderTarget::DrawText a objekt IDWriteTextFormat. Metoda ID2D1RenderTarget::DrawText přijímá následující parametry:

    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.
        );
    
    

Vykreslení objektu rozložení IDWriteText

Chcete-li vykreslit text s nastavením rozložení textu určeným objektem IDWriteTextLayout, změňte kód v metodě MultiformattedText::DrawText, aby použil IDWriteTextLayout::DrawTextLayout.

  1. Declare D2D1_POINT_2F proměnnou a nastavte ji na levý horní bod okna.

    D2D1_POINT_2F origin = D2D1::Point2F(
        static_cast<FLOAT>(rc.left / dpiScaleX_),
        static_cast<FLOAT>(rc.top / dpiScaleY_)
        );
    
    
  2. Nakreslete text na obrazovku zavoláním ID2D1RenderTarget::DrawTextLayout metody Direct2D cílového objektu vykreslování a předáním ukazatele IDWriteTextLayout.

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