Dela via


Samverkan med GDI

DirectWrite tillhandahåller en migreringssökväg från och viss samverkan med GDI:s teckensnittsmodell samt gränssnitt för att återge text till en bitmapp som sedan kan ritas i ett fönster.

Den här översikten innehåller följande delar:

Introduktion

DirectWrite innehåller metoder för konvertering mellan GDI:s LOGFONT-struktur och DirectWrite-teckensnittsgränssnitt. På så sätt kan du använda GDI för en del eller hela teckensnittsuppräkningen och markeringen, samtidigt som du drar nytta av de förbättrade funktionerna och prestandan för DirectWrite. DirectWrite har också gränssnitt för återgivning till en bitmapp om du vill visa text på en GDI-yta.

Del 1: IDWriteGdiInterop

Gränssnittet IDWriteGdiInterop används för att konvertera mellan GDI-teckensnittsstrukturer och DirectWrite teckensnittsgränssnitt, och även för att skapa ett IDWriteBitmapRenderTarget- objekt. Hämta ett IDWriteGdiInterop- objekt med hjälp av metoden IDWriteFactory::GetGdiInterop,enligt följande kod.

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

Del 2: Teckensnittsobjekt

GDI använder LOGFONT-strukturen för att lagra information om teckensnitt och textformat. Metoden IDWriteGdiInterop::CreateFontFromLOGFONT konverterar en LOGFONT-struktur till ett IDWriteFont- objekt, enligt följande kod.

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

Men IDWriteFont kapslar inte in all samma information som en LOGFONT gör. En LOGFONT-struktur innehåller teckenstorlek, tyngd, stil, understrykning, genomstrykning, teckensnittsnamn och annan information. IDWriteFont objekt innehåller information om ett teckensnitt och dess vikt och format, men inte teckenstorlek, understrykning och så vidare. Med DirectWritekapslas formateringsinformationselement som dessa in av ett IDWriteTextFormat objekt eller, för specifika textområden, ett IDWriteTextLayout- objekt.

Du har möjlighet att konvertera en IDWriteFont till en LOGFONT med hjälp av IDWriteGdiInterop::ConvertFontToLOGFONT.

Del 3: Återgivning

Om du vill återge DirectWrite-text till en GDI-yta använder du en anpassad textåtergivning. Se avsnittet Rendera till en GDI-yta.