Как я могу создать шрифт DirectWrite с определенной растяжкой на основе структуры LOGFONT?

У меня есть структура LOGFONT, которую я преобразую в IDWriteFont, используя CreateFontFromLOGFONT():

IDWriteFont* dWriteFont = nullptr;
if (FAILED(dWriteGdiInterop->CreateFontFromLOGFONT(&logFont, &dWriteFont))) return;

Если LOGFONT описывает конденсированный шрифт Tw Cen MT, я бы хотел, чтобы шрифт DirectWrite имел назначенный атрибут DWRITE_FONT_STRETCH_CONDENSED.

LOGFONT имеет ширину '0', независимо от того, какое растяжение я выберу (конденсат, широкий и т. Д.) Кажется, что растяжение можно вычесть только из имени шрифта, а метод DirectWrite не может это сделать. Это ошибка?

Как я могу создать шрифт DirectWrite с определенной растяжкой на основе структуры LOGFONT?

1 ответ

Я не думаю, что это обязательно ошибка, например, dwrite_3.h имеет комментарий для этого метода, в котором говорится, что рассматриваются только некоторые поля: lfFaceName, lfCharSet, lfWeight, lfItalic. Здесь нет ширины.

Вы все еще можете попытаться попросить сгущенного, проходящего через семью:

  • вызов GetFontFamily() на шрифт вернулся из CreateFontFromLOGFONT();
  • использование GetFirstMatchingFont() на этой семье с параметрами, которые вы хотите.

Это должно работать, если семейство Tw Cen MT имеет сжатый вариант с точки зрения DirectWrite.

Другие вопросы по тегам