與 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 主題。