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.
Rendering del testo descritto da IDWriteTextFormat
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. );
Rendering di un oggetto layout IDWriteText
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_ );