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.
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_ );
Använd metoden ID2D1RenderTarget::DrawText och objektet IDWriteTextFormat för att återge text på skärmen. Metoden ID2D1RenderTarget::DrawText tar följande parametrar:
- En sträng som ska återges.
- En pekare till ett IDWriteTextFormat-gränssnitt.
- En Direct2D- layout rektangel.
- En pekare till ett gränssnitt som exponerar 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. );
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.
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_) );
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_ );