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


Взаимодействие с 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 Surface .