Interoperando com GDI
DirectWrite fornece um caminho de migração a partir do modelo de fonte do GDI, assim como alguma interoperabilidade, além de interfaces para renderizar texto em um bitmap que depois pode ser desenhado numa janela.
Esta visão geral contém as seguintes partes:
Introdução
DirectWrite fornece métodos para converter entre a estrutura LOGFONT do GDI e as interfaces de fonte DirectWrite. Isso permite que você use GDI para parte ou toda a enumeração e seleção de fontes, enquanto aproveita a funcionalidade e o desempenho aprimorados do DirectWrite. DirectWrite também tem interfaces para renderizar para 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 IDWriteGdiInterop objeto usando o IDWriteFactory::GetGdiInterop método, 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
GDI usa a estrutura LOGFONT para armazenar informações sobre a fonte e estilo de texto. O IDWriteGdiInterop::CreateFontFromLOGFONT método converterá uma estrutura LOGFONT em um IDWriteFont objeto, como 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 do tipo de letra, espessura, estilo, sublinhado, riscado, nome da fonte e outras informações. objetos IDWriteFont contêm informações sobre uma fonte e o seu peso e estilo, mas não o tamanho da fonte, sublinhado, etc. Com DirectWrite, elementos de informação de formatação como estes são encapsulados por um IDWriteTextFormat objeto ou, para intervalos específicos de texto, um IDWriteTextLayout objeto.
Você tem a opção de converter um IDWriteFont em um LOGFONT usando o IDWriteGdiInterop::ConvertFontToLOGFONT.
Parte 3: Renderização
Para renderizar texto DirectWrite em uma superfície GDI, use um renderizador de texto personalizado. Consulte o tópico Renderizar para uma superfície GDI.