Interoperabilität mit GDI
DirectWrite bietet einen Migrationspfad von und eine gewisse Interoperabilität mit dem Schriftartmodell von GDI sowie Schnittstellen zum Rendern von Text in eine Bitmap, die dann in einem Fenster gezeichnet werden kann.
Diese Übersicht enthält die folgenden Teile:
Einführung
DirectWrite stellt Methoden zum Konvertieren zwischen der LOGFONT-Struktur von GDI und DirectWrite Schriftartschnittstellen bereit. 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 auch ein IDWriteBitmapRenderTarget-Objekt zu erstellen. Abrufen eines IDWriteGdiInterop-Objekts mithilfe der IDWriteFactory::GetGdiInterop-Methode, 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 zur Schriftart und zum Format von Text zu speichern. Die IDWriteGdiInterop::CreateFontFromLOGFONT-Methode konvertiert eine LOGFONT-Struktur in ein IDWriteFont-Objekt, wie im folgenden Code zu sehen.
// Convert to a DirectWrite font.
if (SUCCEEDED(hr))
{
hr = g_pGdiInterop->CreateFontFromLOGFONT(&lf, &pFont);
}
IDWriteFont kapselt jedoch nicht alle Informationen, die ein LOGFONT macht. Eine LOGFONT-Struktur enthält den Schriftgrad, die Schriftbreite, das Format, die Unterstreichung, das Strichzeichen, den Namen der Schriftart und einige weitere Informationen. IDWriteFont-Objekte enthalten Informationen über eine Schriftart und deren Gewichtung und Stil, aber nicht den Schriftgrad, die Unterstreichung usw. Mit DirectWritewerden Formatierungsinformationselemente wie diese durch ein IDWriteTextFormat-Objekt oder für bestimmte Textbereiche durch ein IDWriteTextLayout-Objekt gekapselt.
Sie haben die Möglichkeit, ein IDWriteFont mit idWriteGdiInterop::ConvertFontToLOGFONTin 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 in einer GDI-Oberfläche.