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