Condividi tramite


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.

  1. 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_
        );
    
    
  2. 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:

    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.

  1. 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_)
        );
    
    
  2. 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_
        );