Condividi tramite


Interoperabilità con GDI

DirectWrite fornisce un percorso di migrazione da e un'interoperabilità con il modello di carattere GDI, nonché interfacce per il rendering del testo in una bitmap che può quindi essere disegnata in una finestra.

Questa panoramica contiene le parti seguenti:

Introduzione

DirectWrite fornisce metodi per la conversione tra la struttura LOGFONT di GDI e le interfacce dei tipi di carattere DirectWrite. In questo modo è possibile usare GDI per alcune o tutte le enumerazione e selezione dei tipi di carattere, sfruttando al tempo stesso le funzionalità e le prestazioni migliorate di DirectWrite. DirectWrite include anche interfacce per il rendering in una bitmap se si desidera visualizzare il testo in una superficie GDI.

Parte 1: IDWriteGdiInterop

L'interfaccia IDWriteGdiInterop viene usata per eseguire la conversione tra le strutture dei tipi di carattere GDI e le interfacce dei tipi di carattere DirectWrite e anche per creare un oggetto IDWriteBitmapRenderTarget. Ottenere un oggetto IDWriteGdiInterop usando il metodo IDWriteFactory::GetGdiInterop , come illustrato nel codice seguente.

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

Parte 2: Oggetti font

GDI usa la struttura LOGFONT per archiviare informazioni sul tipo di carattere e sullo stile del testo. Il metodo IDWriteGdiInterop::CreateFontFromLOGFONT converte una struttura LOGFONT in un oggetto IDWriteFont , come illustrato nel codice seguente.

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

Tuttavia , IDWriteFont non incapsula tutte le stesse informazioni che un LOGFONT esegue. Una struttura LOGFONT contiene le dimensioni, il peso, lo stile, la sottolineatura, lo barrato, il nome del carattere e altre informazioni. Gli oggetti IDWriteFont contengono informazioni su un tipo di carattere e sul relativo spessore e stile, ma non sulle dimensioni, la sottolineatura e così via del carattere. Con DirectWrite, la formattazione di elementi informativi come questi viene incapsulata da un oggetto IDWriteTextFormat o, per intervalli specifici di testo, un oggetto IDWriteTextLayout.

È possibile convertire un IDWriteFont in LOGFONT usando IDWriteGdiInterop::ConvertFontToLOGFONT.

Parte 3: Rendering

Per eseguire il rendering DirectWrite testo in una superficie GDI, usare un renderer di testo personalizzato. Vedi l'argomento Eseguire il rendering in un dispositivo Surface GDI .