Zusammenarbeit mit GDI

DirectWrite bietet einen Migrationspfad und eine gewisse Interoperabilität mit dem Schriftartmodell von GDI sowie Schnittstellen zum Rendern von Text in einer Bitmap, die dann in einem Fenster gezeichnet werden kann.

Diese Übersicht enthält die folgenden Teile:

Einführung

DirectWrite bietet Methoden zum Konvertieren zwischen der LOGFONT-Struktur von GDI und DirectWrite Schriftartschnittstellen. Dadurch können Sie GDI für einen Teil oder die gesamte Schriftartenenumeration und -auswahl verwenden und gleichzeitig die verbesserte Funktionalität und Leistung von DirectWrite nutzen. DirectWrite verfügt auch über Schnittstellen zum Rendern in einer Bitmap, wenn Sie Text auf einer GDI-Oberfläche anzeigen möchten.

Teil 1: IDWriteGdiInterop

Die IDWriteGdiInterop-Schnittstelle wird verwendet, um zwischen GDI-Schriftartstrukturen und DirectWrite Schriftartschnittstellen zu konvertieren und ein IDWriteBitmapRenderTarget-Objekt zu erstellen. Rufen Sie ein IDWriteGdiInterop-Objekt mithilfe der IDWriteFactory::GetGdiInterop-Methode ab, wie im folgenden Code gezeigt.

// Create a GDI interop interface.
if (SUCCEEDED(hr))
{
    hr = g_pDWriteFactory->GetGdiInterop(&g_pGdiInterop);
}

Teil 2: Schriftartobjekte

GDI verwendet die LOGFONT-Struktur, um Informationen über die Schriftart und den Textstil zu speichern. Die IDWriteGdiInterop::CreateFontFromLOGFONT-Methode konvertiert eine LOGFONT-Struktur in ein IDWriteFont-Objekt , wie im folgenden Code dargestellt.

// Convert to a DirectWrite font.
if (SUCCEEDED(hr))
{
    hr = g_pGdiInterop->CreateFontFromLOGFONT(&lf, &pFont);
}

IDWriteFont kapselt jedoch nicht alle Informationen wie ein LOGFONT. Eine LOGFONT-Struktur enthält den Schriftgrad, die Stärke, den Stil, die Unterstreichung, das Durchstreichen, den Namen der Schriftart und einige weitere Informationen. IDWriteFont-Objekte enthalten Informationen zu einer Schriftart und deren Gewichtung und Stil, aber nicht zum Schriftgrad, zum Unterstrichen usw. Mit DirectWrite werden formatierungsbezogene Informationselemente wie diese von einem IDWriteTextFormat-Objekt oder, für bestimmte Textbereiche, einem IDWriteTextLayout-Objekt gekapselt.

Sie haben die Möglichkeit, ein IDWriteFont mithilfe von IDWriteGdiInterop::ConvertFontToLOGFONT in ein LOGFONT zu konvertieren.

Teil 3: Rendering

Um DirectWrite Text auf einer GDI-Oberfläche zu rendern, verwenden Sie einen benutzerdefinierten Textrenderer. Weitere Informationen finden Sie im Thema Rendern auf einem GDI-Surface .