Udostępnij przez


Współdziałanie z GDI

DirectWrite zapewnia ścieżkę migracji z modelu czcionek GDI oraz pewne współdziałanie z nim, a także interfejsy do renderowania tekstu na mapie bitowej, które następnie można wyświetlić w oknie.

To omówienie zawiera następujące części:

Wprowadzenie

DirectWrite udostępnia metody konwertowania między strukturą LOGFONT GDI a interfejsami czcionek DirectWrite. Dzięki temu można używać GDI do niektórych lub wszystkich wyliczeń i wyboru czcionki, korzystając z ulepszonych funkcji i wydajności DirectWrite. DirectWrite ma również interfejs do renderowania na bitmapie, jeśli chcesz wyświetlić tekst na powierzchni GDI.

Część 1: IDWriteGdiInterop

Interfejs IDWriteGdiInterop jest używany do konwertowania między strukturami czcionek GDI i interfejsami czcionek DirectWrite, a także do utworzenia obiektu IDWriteBitmapRenderTarget. Pobierz obiekt IDWriteGdiInterop przy użyciu metody IDWriteFactory::GetGdiInterop, jak pokazano w poniższym kodzie.

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

Część 2. Obiekty czcionek

GDI używa struktury LOGFONT do przechowywania informacji o czcionki i stylu tekstu. Metoda IDWriteGdiInterop::CreateFontFromLOGFONT przekonwertuje strukturę LOGFONT na obiekt IDWriteFont, jak pokazano w poniższym kodzie.

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

Jednak IDWriteFont nie zawiera wszystkich informacji, które zawiera LOGFONT. Struktura LOGFONT zawiera rozmiar czcionki, grubość, styl, podkreślenie, przekreślenie, nazwę kroju czcionki oraz inne pokrewne informacje. pl-PL: IDWriteFont obiekty zawierają informacje o czcionce i jej wadze oraz stylu, ale nie rozmiar czcionki, podkreślenie itd. W przypadku DirectWriteformatowanie elementów informacji, takich jak te, jest hermetyzowane przez obiekt IDWriteTextFormat lub w przypadku określonych zakresów tekstu obiekt IDWriteTextLayout.

Istnieje możliwość przekonwertowania IDWriteFont na logFONT przy użyciu IDWriteGdiInterop::ConvertFontToLOGFONT.

Część 3. Renderowanie

Aby renderować tekst DirectWrite na powierzchniĘ GDI, należy użyć niestandardowego modułu renderowania tekstu. Zobacz temat Render to a GDI Surface (Renderowanie na powierzchni GDI).