Spolupráce s GDI
DirectWrite poskytuje cestu migrace a určitou interoperabilitu s modelem písem GDI a také rozhraním pro vykreslení textu na rastrový obrázek, který se pak dá nakreslit v okně.
Tento přehled obsahuje následující části:
Úvod
DirectWrite poskytuje metody pro převod mezi strukturou LOGFONT GDI a rozhraními písem DirectWrite. To vám umožní používat GDI pro některé nebo všechny výčty a výběr písma a zároveň využívat vylepšené funkce a výkon DirectWrite. DirectWrite má také rozhraní pro vykreslení rastrového obrázku, pokud chcete zobrazit text na povrchu GDI.
Část 1: IDWriteGdiInterop
Rozhraní IDWriteGdiInterop slouží k převodu mezi strukturami písem GDI a rozhraními písem DirectWrite a také k vytvoření IDWriteBitmapRenderTarget objektu. Získejte objekt IDWriteGdiInterop pomocí metody IDWriteFactory::GetGdiInterop, jak je znázorněno v následujícím kódu.
// Create a GDI interop interface.
if (SUCCEEDED(hr))
{
hr = g_pDWriteFactory->GetGdiInterop(&g_pGdiInterop);
}
Část 2: Objekty písma
GDI používá strukturu LOGFONT k ukládání informací o písmu a stylu textu. Metoda IDWriteGdiInterop::CreateFontFromLOGFONT převede strukturu LOGFONT na objekt IDWriteFont, jak je vidět v následujícím kódu.
// Convert to a DirectWrite font.
if (SUCCEEDED(hr))
{
hr = g_pGdiInterop->CreateFontFromLOGFONT(&lf, &pFont);
}
IDWriteFont však nezahrnou všechny stejné informace, které dělá LOGFONT. Struktura LOGFONT obsahuje velikost písma, tloušťku, styl, podtržení, přeškrtnutí, název obličeje písma a některé další informace. idWriteFont objekty obsahují informace o písmu a jeho hmotnosti a stylu, ale ne o velikosti, podtržení atd. S DirectWritejsou prvky formátování informací, jako jsou tyto, zapouzdřeny v objektu IDWriteTextFormat nebo, pro konkrétní oblasti textu, v objektu IDWriteTextLayout.
Máte možnost převést IDWriteFont na LOGFONT pomocí IDWriteGdiInterop::ConvertFontToLOGFONT.
Část 3: Vykreslování
Pokud chcete vykreslit text DirectWrite na plochu GDI, použijete vlastní renderer textu. Podívejte se na téma Vykreslení na GDI Surface.