Interoperação com GDI

DirectWrite fornece um caminho de migração e alguma interoperabilidade com o modelo de fonte da GDI, bem como interfaces para renderizar texto em um bitmap que pode ser desenhado em uma janela.

Essa visão geral contém as seguintes partes:

Introdução

DirectWrite fornece métodos para converter entre a estrutura LOGFONT da GDI e DirectWrite interfaces de fonte. Isso permite que você use a GDI para alguma ou toda a enumeração e seleção de fontes, aproveitando a funcionalidade e o desempenho aprimorados de DirectWrite. DirectWrite também tem interfaces para renderizar em um bitmap se você quiser exibir texto em uma superfície GDI.

Parte 1: IDWriteGdiInterop

A interface IDWriteGdiInterop é usada para converter entre estruturas de fonte GDI e interfaces de fonte DirectWrite e também para criar um objeto IDWriteBitmapRenderTarget. Obtenha um objeto IDWriteGdiInterop usando o método IDWriteFactory::GetGdiInterop , conforme mostrado no código a seguir.

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

Parte 2: Objetos de fonte

O GDI usa a estrutura LOGFONT para armazenar informações sobre a fonte e o estilo do texto. O método IDWriteGdiInterop::CreateFontFromLOGFONT converterá uma estrutura LOGFONT em um objeto IDWriteFont , conforme visto no código a seguir.

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

No entanto, IDWriteFont não encapsula todas as mesmas informações que um LOGFONT faz. Uma estrutura LOGFONT contém o tamanho da fonte, o peso, o estilo, o sublinhado, o strikeout, o nome da face da fonte e algumas outras informações. Os objetos IDWriteFont contêm informações sobre uma fonte e seu peso e estilo, mas não o tamanho da fonte, sublinhado e assim por diante. Com DirectWrite, os elementos de informações de formatação, como esses, são encapsulados por um objeto IDWriteTextFormat ou, para intervalos específicos de texto, um objeto IDWriteTextLayout.

Você tem a opção de converter um IDWriteFont em um LOGFONT usando o IDWriteGdiInterop::ConvertFontToLOGFONT.

Parte 3: Renderização

Para renderizar DirectWrite texto em uma superfície GDI, use um renderizador de texto personalizado. Consulte o tópico Renderizar para um Surface GDI .