與 GDI 互作
DirectWrite 提供從 GDI 字型模型遷移的路徑,以及與其的某些互操作性,還提供將文字渲染為位圖以供在視窗上繪製的介面。
此概觀包含下列部分:
- 簡介
- 第 1 部分:IDWriteGdiInterop
- 第 2 部分 :字型物件
- 第 3 部分:渲染
介紹
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::ConvertFontToLOGFONT,將 IDWriteFont 轉換成 LOGFONT。
第3部分:轉譯
若要將 DirectWrite 文字轉譯成 GDI 表面,請使用自定義文字轉譯器。 請參閱 繪製至 GDI Surface 主題。