Слишком много шрифтов при перечислении с помощью функции EnumFontFamiliesExC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Слишком много шрифтов при перечислении с помощью функции EnumFontFamiliesEx

Сообщение Anonymous »

Я пытаюсь создать список шрифтов, из которых пользователь сможет выбирать. Я делаю это с помощью функции 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?

Подробнее здесь: https://stackoverflow.com/questions/112 ... x-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»