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 .