Прошло много времени с тех пор, как я это сделал, поэтому считаю это обоснованным предположением.
Сначала вы вызываете EnumFontFamilies с нулевым указателем на lpszFamily (который теперь иногда неправильно называют lpLogfont в документах).Это дает вам один типичный шрифт из каждого семейства шрифтов (например, Arial).
Как только пользователь выбирает семейство, вы снова используете EnumFontFamilies, на этот раз с именем этого семейства.Затем следует перечислить все файлы шрифтов, которые принадлежат к этому семейству шрифтов.Объект NEWTEXTMETRIC, переданный обратному вызову перечисления, можно проверить, выделен ли он жирным шрифтом, курсивом и т. Д.
Помните, что для NEWTEXTMETRIC вы можете получить указатель на просто TEXTMETRIC.Я не уверен, как вы должны знать, есть ли дополнительные поля или нет.
Вы также можете сделать это с EnumFontFamiliesEx (обратите внимание на суффикс -Ex).В документах есть таблица, в которой указано, что будет перечисляться в зависимости от того, какие ограничения вы вводите в LOGFONT.Обратный вызов для EnumFontFamiliesEx также дает поле elfFullName, в котором должно указываться имя шрифта с конкретным поддерживаемым стилем (например, «Arial Black»).Обратите внимание, что эти имена указаны в ANSI, даже если вы используете широкую ("Unicode") версию API.