Interoperación con GDI

DirectWrite proporciona una ruta de migración de y una cierta interoperabilidad con el modelo de fuentes de GDI, así como interfaces para representar texto en un mapa de bits que luego se puede dibujar en una ventana.

Esta información general contiene las siguientes partes:

Introducción

DirectWrite proporciona métodos para convertir entre la estructura LOGFONT de GDI y DirectWrite interfaces de fuente. Esto le permite usar GDI para algunas o todas las enumeraciones de fuentes y la selección, al tiempo que aprovecha la funcionalidad mejorada y el rendimiento de DirectWrite. DirectWrite también tiene interfaces para representar en un mapa de bits si desea mostrar texto en una superficie GDI.

Parte 1: IDWriteGdiInterop

La interfaz IDWriteGdiInterop se usa para convertir entre estructuras de fuente GDI e interfaces de fuente DirectWrite, y también para crear un objeto IDWriteBitmapRenderTarget. Obtenga un objeto IDWriteGdiInterop mediante el método IDWriteFactory::GetGdiInterop , como se muestra en el código siguiente.

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

Parte 2: Objetos de fuente

GDI usa la estructura LOGFONT para almacenar información sobre la fuente y el estilo del texto. El método IDWriteGdiInterop::CreateFontFromLOGFONT convertirá una estructura LOGFONT en un objeto IDWriteFont , como se muestra en el código siguiente.

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

Sin embargo, IDWriteFont no encapsula toda la información que hace un LOGFONT. Una estructura LOGFONT contiene el tamaño de fuente, el peso, el estilo, el subrayado, el tachado, el nombre de la cara de fuente y otra información. Los objetos IDWriteFont contienen información sobre una fuente y su peso y estilo, pero no el tamaño de fuente, el subrayado, etc. Con DirectWrite, los elementos de información de formato como estos se encapsulan mediante un objeto IDWriteTextFormat o, para intervalos de texto específicos, un objeto IDWriteTextLayout.

Tiene la opción de convertir un IDWriteFont en un LOGFONT mediante IDWriteGdiInterop::ConvertFontToLOGFONT.

Parte 3: Representación

Para representar DirectWrite texto en una superficie GDI, use un representador de texto personalizado. Consulta el tema Render to a GDI Surface (Representar en una superficie GDI ).