(0) exportieren Drucken
Alle erweitern

Lernprogramm: Erste Schritte mit DirectWrite

DirectWrite stellt zwei Schnittstellen zum Formatieren von Text bereit: IDWriteTextFormat und IDWriteTextLayout. IDWriteTextFormat beschreibt nur das Format für Text und wird in Fällen verwendet, wenn Schriftgrad, Format, Gewichtung usw. für eine ganze Zeichenfolge gelten sollen. Andererseits kapselt IDWriteTextLayout sowohl eine Textzeichenfolge als auch die Formatierung für angegebene Bereiche der Zeichenfolge. In diesem Dokument werden alle Schnittstellen und ihre Verwendungen beschrieben. Weitere Informationen zur Erstellung und den Methoden dieser Schnittstellen finden Sie auf den IDWriteTextFormat und IDWriteTextLayout-Referenzseiten.

Dieses Dokument umfasst die folgenden Abschnitte:

IDWriteTextFormat

Ein IDWriteTextFormat-Objekt wird zu folgenden Zwecken verwendet:

  • Beschreiben des Formats für eine ganze Zeichenfolge beim Rendern. Um eine Zeichenfolge mit mehreren Formaten zu rendern, verwenden Sie ein IDWriteTextLayout-Objekt.
  • Angeben des Standardtextformats, wenn Sie ein IDWriteTextLayout-Objekt erstellen.

Sie erstellen ein IDWriteTextFormat-Objekt mit der IDWriteFactory::CreateTextFormat-Methode und geben die Schriftfamilie, Schriftsammlung, Schriftbreite, den Schriftgrad (in DIPs) und den Gebietsschemanamen an.

Ändern eines IDWriteTextFormat

Sobald eine IDWriteTextFormat-Schnittstelle erstellt wurde, können einige Werte nicht geändert werden: die Schriftfamilie, -sammlung, -breite und der Schriftgrad sowie der Gebietsschemaname. Um diese Werte zu ändern, muss ein neues IDWriteTextFormat-Objekt erstellt werden.

IDWriteTextLayout ermöglicht es Ihnen, die obigen Eigenschaften zu ändern, ohne etwas neu zu erstellen. IDWriteTextFormat ermöglicht Ihnen, Formatänderungen vorzunehmen, die für den ganzen Text gelten, z. B. die Textausrichtung. Wenn Sie Formatierung für bestimmte Zeichenbereiche übernehmen möchten, sollten Sie dies mit einem IDWriteTextLayout tun.

IDWriteTextFormat stellt Methoden bereit, um die Textausrichtung, Flussrichtung, inkrementellen Tabstopp, Zeilenabstand, Absatzausrichtung, Trimming und Wortumbruch festzulegen. Diese Eigenschaften können jederzeit nach der Erstellung des IDWriteTextFormat-Objekts geändert werden.

IDWriteTextLayout

Die IDWriteTextLayout-Schnittstelle, im Gegensatz zu IDWriteTextFormat, stellt sowohl einen Textblock als auch die zugeordnete Formatierung dar. IDWriteTextFormat stellt ursprüngliche Formatierungsinformationen dar. Im folgenden Beispiel wird gezeigt, wie ein IDWriteTextLayout-Objekt mit IDWriteFactory::CreateTextLayout erstellt wird.



// Create a text layout using the text format.
if (SUCCEEDED(hr))
{
    RECT rect;
    GetClientRect(hwnd_, &rect); 
    float width  = rect.right  / dpiScaleX_;
    float height = rect.bottom / dpiScaleY_;

    hr = pDWriteFactory_->CreateTextLayout(
        wszText_,      // The string to be laid out and formatted.
        cTextLength_,  // The length of the string.
        pTextFormat_,  // The text format to apply to the string (contains font information, etc).
        width,         // The width of the layout box.
        height,        // The height of the layout box.
        &pTextLayout_  // The IDWriteTextLayout interface pointer.
        );
}



Der Text in einem IDWriteTextLayout-Objekt kann nicht geändert werden, nachdem das Objekt erstellt wurde. Um den Text zu ändern, müssen Sie das vorhandene Objekt löschen und ein neues IDWriteTextLayout-Objekt erstellen.

Sie können ein IDWriteTextLayout verwenden, um angegebene Bereiche des Texts zu formatieren. IDWriteTextLayout stellt auch Methoden bereit zum Ändern von Schriftschnitt und -breite und zum Hinzufügen von OpenType-Schriftfunktionen und Treffertests. Weitere Informationen und eine vollständige Liste der Methoden finden Sie auf der Referenzseite für IDWriteTextLayout.

Formatieren eines Textbereichs

IDWriteTextLayout stellt mehrere Methoden bereit, um Bereiche des Texts zu formatieren. Jede dieser Methoden akzeptiert eine DWRITE_TEXT_RANGE-Struktur als Parameter, um die Starttextposition in der Zeichenfolge und die Länge des zu formatierenden Bereichs anzugeben. Im folgenden Beispiel wird gezeigt, wie die Schriftbreite eines Bereichs des Texts auf Fettdruck festgelegt wird.



// Set the font weight to bold for the first 5 letters.
DWRITE_TEXT_RANGE textRange = {0, 4};

if (SUCCEEDED(hr))
{
    hr = pTextLayout_->SetFontWeight(DWRITE_FONT_WEIGHT_BOLD, textRange);
}



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

 

 

Anzeigen:
© 2014 Microsoft