Поделиться через


Взаимодействие с GDI

DirectWrite предоставляет путь миграции, а также некоторые возможности взаимодействия с моделью шрифта GDI, а также интерфейсы для отрисовки текста в растровую карту, которую затем можно нарисовать в окне.

В этом обзоре содержатся следующие части:

Знакомство

DirectWrite предоставляет методы преобразования между структурой LOGFONT GDI и интерфейсами шрифтов DirectWrite. Это позволяет использовать GDI для некоторых или всех перечислений шрифтов и выбора, используя улучшенные функциональные возможности и производительность DirectWrite. DirectWrite также имеет интерфейсы для отрисовки на растровое изображение, если вы хотите отобразить текст на поверхности GDI.

Часть 1. IDWriteGdiInterop

Интерфейс IDWriteGdiInterop используется для преобразования между структурами шрифтов GDI и интерфейсами шрифтов DirectWrite, а также для создания объекта IDWriteBitmapRenderTarget. Получите объект IDWriteGdiInterop с помощью метода IDWriteFactory::GetGdiInterop, как показано в следующем коде.

// 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.

У вас есть возможность преобразовать IDWriteFont в LOGFONT с помощью IDWriteGdiInterop::ConvertFontToLOGFONT.

Часть 3. Отрисовка

Для отображения текста DirectWrite в поверхности GDI используется настраиваемый отрисовщик текста. См. раздел Рендеринг на поверхность GDI.