Как получить доступные шрифты стиля данного шрифта - PullRequest
1 голос
/ 11 марта 2019

Я хочу создать 2 поля со списком. Первая комбинация со всеми установленными в Windows шрифтами, вторая со доступными стилями шрифтов на основе выбранного шрифта в первом поле со списком.

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

Я не хочу использовать CFontDialog

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Прошло много времени с тех пор, как я это сделал, поэтому считаю это обоснованным предположением.

Сначала вы вызываете EnumFontFamilies с нулевым указателем на lpszFamily (который теперь иногда неправильно называют lpLogfont в документах).Это дает вам один типичный шрифт из каждого семейства шрифтов (например, Arial).

Как только пользователь выбирает семейство, вы снова используете EnumFontFamilies, на этот раз с именем этого семейства.Затем следует перечислить все файлы шрифтов, которые принадлежат к этому семейству шрифтов.Объект NEWTEXTMETRIC, переданный обратному вызову перечисления, можно проверить, выделен ли он жирным шрифтом, курсивом и т. Д.

Помните, что для NEWTEXTMETRIC вы можете получить указатель на просто TEXTMETRIC.Я не уверен, как вы должны знать, есть ли дополнительные поля или нет.

Вы также можете сделать это с EnumFontFamiliesEx (обратите внимание на суффикс -Ex).В документах есть таблица, в которой указано, что будет перечисляться в зависимости от того, какие ограничения вы вводите в LOGFONT.Обратный вызов для EnumFontFamiliesEx также дает поле elfFullName, в котором должно указываться имя шрифта с конкретным поддерживаемым стилем (например, «Arial Black»).Обратите внимание, что эти имена указаны в ANSI, даже если вы используете широкую ("Unicode") версию API.

0 голосов
/ 11 марта 2019

Это зависит от того, что вы хотите сделать с перечисленными результатами. Если вы хотите отфильтровать смоделированные лица и просто получить список, я предлагаю взглянуть на DirectWrite, где смоделированные лица явно помечены как таковые.

Если вы хотите иметь возможность сделать выбор из этого диалогового окна и использовать его для рендеринга с помощью GDI, также можно определить, произошло ли моделирование, но не документированным способом API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...