Dela via


Rendera med Direct2D

Direct2D innehåller metoder för att återge text med formatering som endast beskrivs av en IDWriteTextFormat- eller en IDWriteTextLayout- till en Direct2D-yta.

Återgivningstext som beskrivs av IDWriteTextFormat

Om du vill återge en sträng med hjälp av ett IDWriteTextFormat-objekt för att beskriva formateringen för hela strängen, använder du metoden ID2D1RenderTarget::DrawText som tillhandahålls av Direct2D.

  1. Definiera området för textlayouten genom att hämta dimensionerna för återgivningsområdet och skapa en Direct2D- rektangel som har samma dimensioner.

    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. Använd metoden ID2D1RenderTarget::DrawText och objektet IDWriteTextFormat för att återge text på skärmen. Metoden ID2D1RenderTarget::DrawText tar följande parametrar:

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

Rendera ett IDWriteText-layoutobjekt

Om du vill rita texten med de textlayoutinställningar som anges av objektet IDWriteTextLayout, ändrar du koden i metoden MultiformattedText::DrawText så att den använder IDWriteTextLayout::DrawTextLayout.

  1. Deklarera en D2D1_POINT_2F variabel och sätt den till det övre vänstra hörnet av fönstret.

    D2D1_POINT_2F origin = D2D1::Point2F(
        static_cast<FLOAT>(rc.left / dpiScaleX_),
        static_cast<FLOAT>(rc.top / dpiScaleY_)
        );
    
    
  2. Rita ut texten på skärmen genom att anropa ID2D1RenderTarget::DrawTextLayout för Direct2D rendermålet och skicka IDWriteTextLayout pekaren.

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