Rendern mit Direct2D

Direct2D bietet Methoden zum Rendern von Text mit Formatierung, die nur durch ein IDWriteTextFormat oder ein IDWriteTextLayout auf einer Direct2D-Oberfläche beschrieben wird.

Renderingtext, der von IDWriteTextFormat beschrieben wird

Um eine Zeichenfolge mithilfe eines IDWriteTextFormat-Objekts zu rendern, um die Formatierung für die gesamte Zeichenfolge zu beschreiben, verwenden Sie die id2D1RenderTarget::D rawText-Methode, die von Direct2Dbereitgestellt wird.

  1. Definieren Sie den Bereich für das Textlayout, indem Sie die Dimensionen 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_
        );
    
    
  2. Verwenden Sie die ID2D1RenderTarget::D rawText-Methode und das IDWriteTextFormat-Objekt, um Text auf dem Bildschirm zu rendern. Die ID2D1RenderTarget::D rawText-Methode nimmt die folgenden Parameter an:

    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 vom IDWriteTextLayout-Objekt angegebenen Textlayouteinstellungen zu zeichnen, ändern Sie den Code in der MultiformattedText::D rawText-Methode so, dass IDWriteTextLayout::D rawTextLayout verwendetwird.

  1. 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_)
        );
    
    
  2. Zeichnen Sie den Text auf den Bildschirm, indem Sie die ID2D1RenderTarget::D rawTextLayout-Methode des Direct2D-Renderziels aufrufen und den IDWriteTextLayout-Zeiger übergeben.

    pRT_->DrawTextLayout(
        origin,
        pTextLayout_,
        pBlackBrush_
        );