GDI との相互運用

DirectWriteは、GDI のフォント モデルからの移行パスと、その後ウィンドウに描画できるビットマップにテキストをレンダリングするためのインターフェイスとの相互運用性を提供します。

この概要には、次の部分が含まれています。

はじめに

DirectWriteは、GDI の LOGFONT 構造体とDirectWriteフォント インターフェイスの間で変換するためのメソッドを提供します。 これにより、フォントの列挙と選択の一部またはすべてに GDI を使用しながら、DirectWriteの機能とパフォーマンスを向上させることができます。 DirectWriteには、GDI サーフェイスにテキストを表示する場合にビットマップにレンダリングするためのインターフェイスもあります。

パート 1: IDWriteGdiInterop

IDWriteGdiInterop インターフェイスは、GDI フォント構造とDirectWriteフォント インターフェイス間の変換、および IDWriteBitmapRenderTarget オブジェクトの作成にも使用されます。 次のコードに示すように、IDWriteFactory::GetGdiInterop メソッドを使用して IDWriteGdiInterop オブジェクトを取得します。

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

パート 2: フォント オブジェクト

GDI では、LOGFONT 構造体を使用して、テキストのフォントとスタイルに関する情報を格納します。 IDWriteGdiInterop::CreateFontFromLOGFONT メソッドは、次のコードに示すように、LOGFONT 構造体を IDWriteFont オブジェクトに変換します。

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

ただし、 IDWriteFont では、LOGFONT と同じ情報がすべてカプセル化されるわけではありません。 LOGFONT 構造体には、フォント サイズ、太さ、スタイル、下線、取り消し線、フォントの顔名、その他の情報が含まれます。 IDWriteFont オブジェクトには、フォントとその太さとスタイルに関する情報が含まれますが、フォント サイズや下線などの情報は含まれません。 DirectWriteでは、このような書式設定情報要素は IDWriteTextFormat オブジェクトまたは特定のテキスト範囲の IDWriteTextLayout オブジェクトによってカプセル化されます。

IDWriteGdiInterop::ConvertFontToLOGFONT を使用して IDWriteFont を LOGFONT に変換するオプションがあります。

パート 3: レンダリング

GDI サーフェスDirectWriteテキストをレンダリングするには、カスタム テキスト レンダラーを使用します。 「GDI Surface にレンダリングする」トピックを参照してください。