Eseguire il rendering con Direct2D
Direct2D offre metodi per eseguire il rendering di testo con formattazione descritta solo da un IDWriteTextFormat o un IDWriteTextLayout su una superficie di Direct2D.
Per eseguire il rendering di una stringa utilizzando un oggettoIDWriteTextFormatper descrivere la formattazione per l'intera stringa, utilizzare il metodo ID2D1RenderTarget::D rawText fornito da Direct2D.
Definire l'area per il layout di testo recuperando le dimensioni dell'area di rendering e creare un rettangolo Direct2D con le stesse dimensioni.
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_ );
Utilizzare il metodo ID2D1RenderTarget::DrawText e l'oggetto IDWriteTextFormat per effettuare il rendering del testo sullo schermo. Il metodo ID2D1RenderTarget::DrawText accetta i seguenti parametri:
- Stringa di cui eseguire il rendering.
- Puntatore a un'interfaccia di IDWriteTextFormat.
- Un rettangolo di layout Direct2D .
- Un puntatore a un'interfaccia che espone 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. );
Per disegnare il testo con le impostazioni di layout del testo specificate dall'oggetto IDWriteTextLayout, modificare il codice nel metodo MultiformattedText::DrawText per usare IDWriteTextLayout::DrawTextLayout.
Dichiarare una variabile D2D1_POINT_2F e impostarla sul punto in alto a sinistra della finestra.
D2D1_POINT_2F origin = D2D1::Point2F( static_cast<FLOAT>(rc.left / dpiScaleX_), static_cast<FLOAT>(rc.top / dpiScaleY_) );
Disegnare il testo sullo schermo chiamando il metodo ID2D1RenderTarget::DrawTextLayout del Direct2D target di rendering e passando il puntatore IDWriteTextLayout.
pRT_->DrawTextLayout( origin, pTextLayout_, pBlackBrush_ );