Функция EnumFontFamiliesEx перечисляет все шрифты в системе, которые соответствуют характеристикам шрифта, заданного структурой LOGFONT. EnumFontFamiliesEx перечисляет шрифты, основываясь на имени гарнитуры шрифта, наборе символов, или на обоих.
Синтаксис
int EnumFontFamiliesEx( HDC hdc, // дескриптор DC LPLOGFONT lpLogfont, // информация о шрифте FONTENUMPROC lpEnumFontFamExProc, // функция повторного вызова LPARAM lParam, // дополнительные данные DWORD dwFlags // не используется; должен быть 0 ); |
Член | Описание |
---|---|
lfCharset | Если установлен флажок DEFAULT_CHARSET, функция перечисляет все шрифты во всех наборах символов. Если установлено правильное значению набора символов, функция перечисляет только шрифты в заданном наборе символов. |
lfFaceName | Если установлена пустая строка, функция перечисляет один шрифт из каждого доступного названия гарнитуры шрифта. Если установлено правильное название гарнитуры шрифта, функция перечисляет все шрифты с заданным именем. |
lfPitchAndFamily | Должен быть нуль для всех языковых версий операционной системы. |
lpEnumFontFamExProc
[in] Указатель на определяемую приложением функцию повторного вызова. Для получения дополнительной информации, см. функцию EnumFontFamExProc.lParam
[in] Устанавливает определяемое программой значение. Функция передает это значение в функцию повторного вызова наряду с информацией о шрифте.dwFlags
Этот параметр не используется и должен быть нуль.Возвращаемое значение - последнее значение, возвращенное функцией повторного вызова. Это значение зависит от того, какие семейства шрифта являются доступными для заданного устройства.
Функция EnumFontFamiliesEx не использует отмеченные названия гарнитуры шрифта, чтобы идентифицировать наборы символов. Вместо этого, она всегда передает правильное имя гарнитуры шрифта и отдельное значение набора символов в функцию повторного вызова. Функция перечисляет шрифты, основываясь на значениях членов lfCharset и lfFacename в структуре LOGFONT.
Как и EnumFontFamilies, EnumFontFamiliesEx перечисляет все стили шрифта. Не все стили шрифта охватывают те же самые наборы символов. Например, Fontorama Полужирный может содержать ANSI, греческие, и кириллические символы, но Fontorama Курсив может содержать только символы ANSI. По этой причине, лучше всего не предполагать, что заданный шрифт охватывает конкретный набор символов, даже если это - набор символов ANSI. Нижеследующая таблица показывает, результат различных комбинаций значений для членов lfCharset и lfFacename.
Значение | Предназначение |
---|---|
lfCharSet = DEFAULT_CHARSET lfFaceName = '\0' |
Перечисляет все шрифты во всех наборах символов. |
lfCharSet = DEFAULT_CHARSET lfFaceName = конкретный шрифт |
Перечисляет все наборы символов и стили в конкретном шрифте. |
lfCharSet = конкретный набор символов lfFaceName = '\0' |
Перечисляет все стили всех шрифтов в конкретном наборе символов. |
lfCharSet = конкретный набор символов lfFaceName = конкретный шрифт |
Перечисляет все стили шрифта в конкретном наборе символов. |
Нижеследующий пример кода показывает, как эти значения используются.
//чтобы перечислить все стили и наборы символов всех шрифтов: lf.lfFaceName[0] = '\0'; lf.lfCharSet = DEFAULT_CHARSET; //чтобы перечислить все стили и наборы символов шрифта Arial: lstrcpy( (LPSTR)&lf.lfFaceName, "Arial" ); lf.lfCharSet = DEFAULT_CHARSET; //чтобы перечислить все стили и и все шрифты набора символов ANSI lf.lfFaceName[0] = '\0'; lf.lfCharSet = ANSI_CHARSET; //чтобы перечислить все стили шрифта Arial, которые охватывает набора символов ANSI lstrcpy( (LPSTR)&lf.lfFaceName, "Arial" ); lf.lfCharSet = ANSI_CHARSET;
|
Функции повторного вызова для
EnumFontFamilies и EnumFontFamiliesEx очень похожи. Их основное различие в том, что структура ENUMLOGFONTEX включает в себя поле сценария.
Обратите внимание! на то, что основываясь на значениях членов lfCharset и lfFacename, функция EnumFontFamiliesEx перечислит тот же самый шрифт столько раз, сколько есть отдельных наборов символов в шрифте. Это может создать обширный список шрифтов, которые могут быть обременительны для пользователя. Например, шрифт Century Schoolbook может появиться для балтийского, западного, греческого, турецкого и кириллического наборов символов. Чтобы избежать этого, приложение должно фильтровать список шрифтов. |
Шрифты для многих восточно-азиатских языков имеют два названия гарнитуры шрифта: английское и местное. Функции EnumFonts, EnumFontFamilies и EnumFontFamiliesEx возвращают английское название гарнитуры шрифта, если язык конкретной страны в системе не соответствует языку шрифта.
Windows 95/98/Me: EnumFontFamiliesExW поддерживается подпрограммой Microsoft Layer for Unicode. Чтобы использовать ее, Вы должны добавить некоторые файлы к вашему приложению, как изложено в требованиях этой подпрограммы для систем Windows 95/98/Me.
Обзор шрифты и текст, Функции, используемые шрифтами и текстом, EnumFontFamExProc, EnumFonts, EnumFontFamilies, ENUMLOGFONTEX, LOGFONT
Размещение и совместимость EnumFontFamiliesEx |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Да |
Windows Me |
Да |
Windows 98 |
Да |
Windows 95 |
Да |
Используемая библиотека |
Gdi32.lib |
Заголовочный файл |
|
- объявлено в |
Wingdi.h |
- включено в |
Windows.h |
Unicode |
Реализуется как версии Unicode и ANSI в Windows NT /2000/XP. Поддерживается также подпрограммой Microsoft Layer for Unicode |
Замечания по платформе |
Не имеется |