Rendern mithilfe von Direct2D
Direct2D bietet Methoden zum Rendern von Text mit nur durch ein IDWriteTextFormat oder einem IDWriteTextLayout beschriebenen Format auf einer Direct2D-Oberfläche.
Rendern von Text, der von IDWriteTextFormat beschrieben wird
Um eine Zeichenfolge mithilfe eines IDWriteTextFormat-Objekts zur Beschreibung der Formatierung für die gesamte Zeichenfolge zu rendern, verwenden Sie die id2D1RenderTarget::D rawText-Methode , die von Direct2D bereitgestellt wird.
Definieren Sie den Bereich für das Textlayout, indem Sie die Abmessungen des Renderingbereichs abrufen, und erstellen Sie ein Direct2D-Rechteck mit den gleichen Dimensionen.
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_ );
Verwenden Sie die ID2D1RenderTarget::D rawText-Methode und das IDWriteTextFormat-Objekt , um Text auf dem Bildschirm zu rendern. Die ID2D1RenderTarget::D rawText-Methode verwendet die folgenden Parameter:
- Eine zu renderde Zeichenfolge.
- Ein Zeiger auf eine IDWriteTextFormat-Schnittstelle .
- Ein Direct2D-Layoutrechteck .
- Ein Zeiger auf eine Schnittstelle, die ID2D1Brush verfügbar macht.
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. );
Rendern eines IDWriteText-Layoutobjekts
Um den Text mit den textlayout-Einstellungen zu zeichnen, die vom IDWriteTextLayout-Objekt angegeben werden, ändern Sie den Code in der MultiformattedText::D rawText-Methode, um IDWriteTextLayout::D rawTextLayout zu verwenden.
Entsorgen Sie eine D2D1_POINT_2F Variable, und legen Sie sie auf den oberen linken Punkt des Fensters fest.
D2D1_POINT_2F origin = D2D1::Point2F( static_cast<FLOAT>(rc.left / dpiScaleX_), static_cast<FLOAT>(rc.top / dpiScaleY_) );
Zeichnen Sie den Text auf den Bildschirm, indem Sie die ID2D1RenderTarget::D rawTextLayout-Methode des Direct2D-Renderziels aufrufen und den Zeiger IDWriteTextLayout übergeben.
pRT_->DrawTextLayout( origin, pTextLayout_, pBlackBrush_ );