Rendu à l’aide de Direct2D
Direct2D fournit des méthodes permettant de rendre du texte avec une mise en forme décrite uniquement par un IDWriteTextFormat ou un IDWriteTextLayout sur une surface Direct2D.
Rendu du texte décrit par IDWriteTextFormat
Pour restituer une chaîne à l’aide d’un objet IDWriteTextFormat afin de décrire la mise en forme de la chaîne entière, utilisez la méthode ID2D1RenderTarget::D rawText fournie par Direct2D.
Définissez la zone pour la disposition de texte en récupérant les dimensions de la zone de rendu et créez un rectangle Direct2D qui a les mêmes dimensions.
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_ );
Utilisez la méthode ID2D1RenderTarget::D rawText et l’objet IDWriteTextFormat pour afficher le texte à l’écran. La méthode ID2D1RenderTarget::D rawText prend les paramètres suivants :
- Chaîne à afficher.
- Pointeur vers une interface IDWriteTextFormat .
- Rectangle de disposition Direct2D .
- Pointeur vers une interface qui expose 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. );
Rendu d’un objet de disposition IDWriteText
Pour dessiner le texte avec les paramètres de disposition de texte spécifiés par l’objet IDWriteTextLayout , modifiez le code de la méthode MultiformattedText::D rawText pour utiliser IDWriteTextLayout::D rawTextLayout.
Delcare D2D1_POINT_2F variable et définissez-la sur le point supérieur gauche de la fenêtre.
D2D1_POINT_2F origin = D2D1::Point2F( static_cast<FLOAT>(rc.left / dpiScaleX_), static_cast<FLOAT>(rc.top / dpiScaleY_) );
Dessinez le texte à l’écran en appelant la méthode ID2D1RenderTarget::D rawTextLayout de la cible de rendu Direct2D et en passant le pointeur IDWriteTextLayout .
pRT_->DrawTextLayout( origin, pTextLayout_, pBlackBrush_ );