Textformatierung und Layout
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, in denen eine gesamte Zeichenfolge denselben Schriftgrad, Schriftschnitt, Stärke usw. aufweisen soll. Auf der anderen Seite IDWriteTextLayout sowohl eine Textzeichenfolge als auch die Formatierung für angegebene Bereiche der Zeichenfolge kapselt. In diesem Dokument werden die einzelnen Schnittstellen und deren Verwendung beschrieben. Weitere Informationen zur Erstellung und Methoden dieser Schnittstellen finden Sie in den IDWriteTextFormat- und IDWriteTextLayout Referenzseiten.
Dieses Dokument enthält die folgenden Teile:
IDWriteTextFormat
Ein IDWriteTextFormat--Objekt wird verwendet für:
- Beschreiben Des Formats für eine gesamte Zeichenfolge beim Rendern. Um eine Zeichenfolge mit mehreren Formaten zu rendern, verwenden Sie ein IDWriteTextLayout--Objekt.
- Geben Sie das Standardtextformat beim Erstellen eines IDWriteTextLayout-Objekts an.
Zum Erstellen eines IDWriteTextFormat--Objekts verwenden Sie die IDWriteFactory::CreateTextFormat-Methode und geben die Schriftartfamilie, Schriftartsammlung, Schriftbreite, Schriftgrad (in DIPs), Gebietsschemanamen an.
Ändern eines IDWriteTextFormats
Nachdem eine IDWriteTextFormat- Schnittstelle erstellt wurde, können einige Werte nicht mehr geändert werden: die Schriftartfamilie, die Sammlung, das Gewicht und die Größe sowie der Gebietsschemaname. Um diese Werte zu ändern, muss ein neues IDWriteTextFormat--Objekt erstellt werden.
mit IDWriteTextLayout- können Sie die oben genannten Eigenschaften ändern, ohne etwas neu zu erstellen. mit IDWriteTextFormat- können Sie Formatänderungen vornehmen, die für den gesamten Text gelten, z. B. die Textausrichtung. Wenn Sie formatierungen auf bestimmte Zeichenbereiche anwenden möchten, sollten Sie dazu ein IDWriteTextLayout-verwenden.
IDWriteTextFormat- stellt Methoden zum Festlegen der Textausrichtung, der Flussrichtung, des inkrementellen Tabstopps, des Zeilenabstands, der Absatzausrichtung, des Kürzens und des Textumbruchs bereit. Diese Eigenschaften können jederzeit nach der Erstellung des IDWriteTextFormat-Objekts geändert werden.
IDWriteTextLayout
Die IDWriteTextLayout Schnittstelle stellt im Gegensatz zu IDWriteTextFormat-sowohl einen Textblock als auch die zugehörige Formatierung dar. IDWriteTextFormat- stellt anfängliche Formatierungsinformationen dar. Das folgende Beispiel zeigt, wie Sie ein IDWriteTextLayout--Objekt mithilfe IDWriteFactory::CreateTextLayout-erstellen.
// 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 Textbereiche zu formatieren. IDWriteTextLayout bietet außerdem Methoden zum Ändern des Schriftschnitts und der Stärke sowie zum Hinzufügen von OpenType-Schriftartfeatures und Treffertests. Weitere Informationen und eine vollständige Liste der Methoden finden Sie auf der IDWriteTextLayout Referenzseite.
Formatieren eines Textbereichs
IDWriteTextLayout stellt mehrere Methoden zum Formatieren von Textbereichen bereit. Jede dieser Methoden verwendet eine DWRITE_TEXT_RANGE Struktur als Parameter, um die Anfangstextposition innerhalb der Zeichenfolge und die Länge des zu formatierenden Bereichs anzugeben. Das folgende Beispiel zeigt, wie die Schriftbreite eines Textbereichs fett formatiert wird.
// Set the font weight to bold for the first 5 letters.
DWRITE_TEXT_RANGE textRange = {0, 5};
if (SUCCEEDED(hr))
{
hr = pTextLayout_->SetFontWeight(DWRITE_FONT_WEIGHT_BOLD, textRange);
}
Renderingoptionen
Text mit nur einem IDWriteTextFormat--Objekt kann mit Direct2D-gerendert werden. Es gibt jedoch einige weitere Optionen zum Rendern eines IDWriteTextLayout- Objekts.
Die von einem IDWriteTextLayout Objekt beschriebene Zeichenfolge kann mithilfe der folgenden Methoden gerendert werden.
- Rendern mit Direct2D-.
- Rendern mithilfe eines benutzerdefinierten Textrenderers.
- Rendern auf einer GDI-Oberfläche.