Partager via


Interopérabilité avec GDI

DirectWrite fournit un chemin de migration et une certaine interopérabilité avec le modèle de police de GDI, ainsi que des interfaces pour le rendu du texte vers une bitmap qui peut ensuite être dessinée dans une fenêtre.

Cette vue d’ensemble contient les éléments suivants :

Introduction

DirectWrite fournit des méthodes de conversion entre la structure LOGFONT de GDI et les interfaces de police DirectWrite. Cela vous permet d’utiliser GDI pour tout ou partie de l’énumération et de la sélection des polices, tout en tirant parti des fonctionnalités et des performances améliorées de DirectWrite. DirectWrite dispose également d’interfaces pour le rendu vers une bitmap si vous souhaitez afficher du texte sur une surface GDI.

Partie 1 : IDWriteGdiInterop

L’interface IDWriteGdiInterop est utilisée pour effectuer une conversion entre des structures de police GDI et des interfaces de police DirectWrite, ainsi que pour créer un objet IDWriteBitmapRenderTarget. Obtenez un objet IDWriteGdiInterop à l’aide de la méthode IDWriteFactory::GetGdiInterop , comme indiqué dans le code suivant.

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

Partie 2 : Objets de police

GDI utilise la structure LOGFONT pour stocker des informations sur la police et le style du texte. La méthode IDWriteGdiInterop::CreateFontFromLOGFONT convertit une structure LOGFONT en objet IDWriteFont , comme indiqué dans le code suivant.

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

Toutefois, IDWriteFont n’encapsule pas toutes les mêmes informations qu’un LOGFONT. Une structure LOGFONT contient la taille de police, le poids, le style, le soulignement, le barré, le nom du visage de la police et d’autres informations. Les objets IDWriteFont contiennent des informations sur une police, son poids et son style, mais pas la taille de police, le soulignement, etc. Avec DirectWrite, les éléments d’informations de mise en forme tels que ceux-ci sont encapsulés par un objet IDWriteTextFormat ou, pour des plages de texte spécifiques, un objet IDWriteTextLayout.

Vous avez la possibilité de convertir un IDWriteFont en un LOGFONT à l’aide de IDWriteGdiInterop::ConvertFontToLOGFONT.

Partie 3 : Rendu

Pour afficher DirectWrite texte sur une surface GDI, utilisez un convertisseur de texte personnalisé. Consultez la rubrique Render to a GDI Surface (Render to a GDI Surface ).