与 GDI 互操作

DirectWrite提供迁移路径,以及 GDI 字体模型的一些互操作性,以及用于将文本呈现到位图的接口,然后可在窗口上绘制。

此概述包含以下部分:

简介

DirectWrite提供了在 GDI 的 LOGFONT 结构和DirectWrite字体界面之间进行转换的方法。 这样,就可以对部分或全部字体枚举和选择使用 GDI,同时利用DirectWrite改进的功能和性能。 如果想要在 GDI 图面上显示文本,DirectWrite还具有呈现到位图的接口。

第 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::ConvertFontToLOGFONTIDWriteFont 转换为 LOGFONT。

第 3 部分:呈现

若要将DirectWrite文本呈现到 GDI 图面,请使用自定义文本呈现器。 请参阅 GDI Surface 主题的呈现。