Eseguire il rendering con Direct2D
Direct2D fornisce metodi per il rendering di testo con formattazione descritta solo da IDWriteTextFormat o IDWriteTextLayout in una superficie Direct2D.
Rendering del testo descritto da IDWriteTextFormat
Per eseguire il rendering di una stringa usando un oggetto IDWriteTextFormat per 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::D rawText e l'oggetto IDWriteTextFormat per eseguire il rendering del testo sullo schermo. Il metodo ID2D1RenderTarget::D rawText accetta i parametri seguenti:
- Stringa di cui eseguire il rendering.
- Puntatore a un'interfaccia IDWriteTextFormat .
- Rettangolo di layout Direct2D .
- 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::D rawText per utilizzare IDWriteTextLayout::D rawTextLayout.
Delcare una variabile D2D1_POINT_2F e impostarla sul punto superiore sinistro 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::D rawTextLayout della destinazione di rendering Direct2D e passando il puntatore IDWriteTextLayout .
pRT_->DrawTextLayout( origin, pTextLayout_, pBlackBrush_ );