Я пытаюсь создать список шрифтов для пользователя на выбор. Я делаю это, используя EnumFontFamiliesEx
, но, к сожалению, список возвращаемых шрифтов слишком длинный. Есть много дополнительных шрифтов, которые кажутся легкомысленными, повторяющимися, для другого языка или иным образом нежелательными для отображения пользователю. Мой скриншот лучше всего иллюстрирует мусор, который я пытаюсь отфильтровать.
Мой код для вызова EnumFontFamiliesEx
выглядит следующим образом:
LOGFONT lf;
memset(&lf, 0, sizeof(lf));
lf.lfCharSet = DEFAULT_CHARSET;
// screenDC is result of CreateCompatibleDC(NULL)
EnumFontFamiliesEx(screenDC, &lf, GetFontsCallback, NULL, 0);
Полученный список выглядит следующим образом: после сортировки в алфавитном порядке и удаления шрифтов с именами дубликатов лиц:
Как вы можете видеть, в общем диалоговом окне шрифта ChooseFont
отображается очень разумный список шрифтов, который удобен для пользователя и имеет смысл. С другой стороны, мой код отображает длинный список дополнительных шрифтов: шрифты, начинающиеся с "@" (почему? Для чего они нужны?), 3 дополнительных варианта шрифта Arial и несколько других шрифтов неизвестной цели, таких как Aheroni, Andalus, Angsana New, AngsanaUPC и т.д. Это безумие.
Как отфильтровать список шрифтов, возвращаемых EnumFontFamiliesEx
, чтобы он точно соответствовал списку, показанному в диалоговом окне ChooseFont
?