Rendern von DirectWrite

Renderingoptionen

Text mit nur von einem IDWriteTextFormat-Objekt beschriebener Formatierung kann mit Direct2D gerendert werden, es gibt jedoch einige weitere Optionen zum Rendern eines IDWriteTextLayout-Objekts.

Die von einem IDWriteTextLayout-Objekt beschriebene Zeichenfolge kann mit den folgenden Methoden gerendert werden.

  1. Rendern mit Direct2D
  2. Rendern mit einem benutzerdefinierten Textrenderer
  3. Rendern auf einer GDI-Oberfläche

1. Rendern mit Direct2D

Um ein IDWriteTextLayout-Objekt mit Direct2D zu rendern, verwenden Sie die ID2D1RenderTarget::DrawTextLayout-Methode, wie im folgenden Code gezeigt.



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



Ausführlichere Informationen zum Zeichnen eines IDWriteTextLayout-Objekts mit Direct2D finden Sie unter Erste Schritte mit DirectWrite.

2. Rendern mit einem benutzerdefinierten Textrenderer

Sie rendern mit einem benutzerdefinierten Renderer mithilfe der IDWriteTextLayout::Draw-Methode, die eine von IDWriteTextRenderer abgeleitete Rückrufschnittstelle als Parameter akzeptiert, wie im folgenden Code gezeigt.



// Draw the text layout using DirectWrite and the CustomTextRenderer class.
hr = pTextLayout_->Draw(
        NULL,
        pTextRenderer_,  // Custom text renderer.
        origin.x,
        origin.y
        );



Die IDWriteTextLayout::Draw-Methode ruft die Methoden des benutzerdefinierten Rendererrückrufs auf, den Sie bereitstellen. Die Methoden DrawGlyphRun, DrawUnderline, DrawInlineObject und DrawStrikethrough führen die Zeichenfunktionen aus.

IDWriteTextRenderer deklariert Methoden zum Zeichnen einer Glyphenserie, einer Unterstreichung, einer Durchstreichung und von Inlineobjekten. Es ist Aufgabe der Anwendung, diese Methoden zu implementieren. Das Erstellen eines benutzerdefinierten Textrenderers ermöglicht es der Anwendung, beim Textrendering zusätzliche Effekte anzuwenden, z. B. einen benutzerdefinierten Füllbereich oder Umriss. Ein Beispiel eines benutzerdefinierten Textrenderers ist im DirectWrite-Beispiel "Hello World" enthalten.

3. Rendern auf einer GDI-Oberfläche

Das Rendern auf einer GDI-Oberfläche ist eigentlich ein Beispiel für die Verwendung eines benutzerdefinierten Textrenderers. Ein Teil der Arbeit wird jedoch in Form der IDWriteBitmapRenderTarget-Schnittstelle für Sie erledigt.

Um diese Schnittstelle zu erstellen, verwenden Sie die IDWriteGdiInterop::CreateBitmapRenderTarget-Methode.

Die DrawGlyphRun-Methode des benutzerdefinierten Textrenderers ruft die IDWriteBitmapRenderTarget::DrawGlyphRun-Methode auf, um die Glyphen zu zeichnen. Das Rendering der Unterstreichung, der Durchstreichung und der Inlineobjekte muss vom benutzerdefinierten Renderer erledigt werden.

Die IDWriteBitmapRenderTarget-Schnittstelle rendert zu einem Gerätekontext (DC) im Arbeitsspeicher. Sie rufen mit der IDWriteBitmapRenderTarget::GetMemoryDC-Methode ein Handle für diesen DC ab.


memoryHdc = g_pBitmapRenderTarget->GetMemoryDC();


Nachdem die Zeichnung ausgeführt wurde, muss der Arbeitsspeicher-DC des IDWriteBitmapRenderTarget-Objekts in die Ziel-GDI-Oberfläche kopiert werden.

Hinweis  Sie haben auch die Möglichkeit, die Bitmap auf einen anderen Oberflächentyp zu übertragen, z. B. eine GDI+-Oberfläche.


// Transfer from DWrite's rendering target to the window.
BitBlt(
    hdc,
    0, 0,
    size.cx, size.cy,
    memoryHdc,
    0, 0, 
    SRCCOPY | NOMIRRORBITMAP
    );


Eine ausführlichere Übersicht über die Zusammenarbeit mit GDI finden Sie unter Interoperabilität mit GDI.

Verwandte Themen

Rendern mit Direct2D
Rendern mit einem benutzerdefinierten Textrenderer
Rendern auf einer GDI-Oberfläche
Interoperabilität mit GDI

 

 

Anzeigen: