Функция EnumFontFamiliesExA (wingdi.h)
Функция EnumFontFamiliesEx перечисляет все шрифты с уникальными именами в системе, которые соответствуют характеристикам шрифта, заданным структурой LOGFONT . EnumFontFamiliesEx перечисляет шрифты на основе имени шрифта, набора символов или и того, и другого.
Синтаксис
int EnumFontFamiliesExA(
[in] HDC hdc,
[in] LPLOGFONTA lpLogfont,
[in] FONTENUMPROCA lpProc,
[in] LPARAM lParam,
DWORD dwFlags
);
Параметры
[in] hdc
Дескриптор контекста устройства, из которого выполняется перечисление шрифтов.
[in] lpLogfont
Указатель на структуру LOGFONT , содержащую сведения о шрифтах для перечисления. Функция проверяет следующие элементы.
Член | Описание |
---|---|
lfCharSet | Если задано значение DEFAULT_CHARSET, функция перечисляет все шрифты с уникальными именами во всех наборах символов. (Если есть два шрифта с одинаковым именем, перечисляется только один.) Если задано допустимое значение набора символов, функция перечисляет только шрифты в указанном наборе символов. |
lfFaceName | Если задана пустая строка, функция перечисляет один шрифт в каждом доступном имени шрифта. Если задано допустимое имя шрифта, функция перечисляет все шрифты с указанным именем. |
lfPitchAndFamily | Для всех языковых версий операционной системы должно быть задано значение 0. |
[in] lpProc
Указатель на функцию обратного вызова, определяемую приложением. Дополнительные сведения см. в разделе Функция EnumFontFamExProc .
[in] lParam
Значение, определенное приложением. Функция передает это значение функции обратного вызова вместе со сведениями о шрифте.
dwFlags
Этот параметр не используется и должен быть равен нулю.
Возвращаемое значение
Возвращаемое значение является последним значением, возвращаемым функцией обратного вызова. Это значение зависит от того, какие семейства шрифтов доступны для указанного устройства.
Комментарии
Функция EnumFontFamiliesEx не использует имена шрифтов с тегами для идентификации наборов символов. Вместо этого функция обратного вызова всегда передает правильное имя шрифта и отдельное значение набора символов. Функция перечисляет шрифты на основе значений элементов lfCharSet и lfFaceName в структуре LOGFONT .
Как и в случае с EnumFontFamilies, EnumFontFamiliesEx перечисляет все стили шрифтов. Не все стили шрифта охватывают одни и те же наборы символов. Например, Fontorama Bold может содержать символы ANSI, греческого и кириллицы, а Fontorama Italic — только символы ANSI. По этой причине лучше не предполагать, что указанный шрифт охватывает определенный набор символов, даже если это набор символов ANSI. В следующей таблице показаны результаты различных сочетаний значений для lfCharSet и lfFaceName.
Значения | Значение |
---|---|
lfCharSet = DEFAULT_CHARSET lfFaceName = '\0' |
Перечисляет все шрифты с уникальными именами во всех наборах символов. Если есть два шрифта с одинаковым именем, перечисляется только один. |
lfCharSet = DEFAULT_CHARSET lfFaceName = определенный шрифт |
Перечисляет все наборы символов и стили в определенном шрифте. |
lfCharSet = определенная кодировка lfFaceName = '\0' |
Перечисляет все стили всех шрифтов в определенной кодировке. |
lfCharSet = определенная кодировка lfFaceName = определенный шрифт |
Перечисляет все стили шрифта в определенной кодировке. |
В следующем примере кода показано, как используются эти значения.
// To enumerate all styles and charsets of all fonts:
lf.lfFaceName[0] = '\0';
lf.lfCharSet = DEFAULT_CHARSET;
HRESULT hr;
// To enumerate all styles and character sets of the Arial font:
hr = StringCchCopy( (LPSTR)lf.lfFaceName, LF_FACESIZE, "Arial" );
if (FAILED(hr))
{
// TODO: write error handler
}
lf.lfCharSet = DEFAULT_CHARSET;
// To enumerate all styles of all fonts for the ANSI character set
lf.lfFaceName[0] = '\0';
lf.lfCharSet = ANSI_CHARSET;
// To enumerate all styles of Arial font that cover the ANSI charset
hr = StringCchCopy( (LPSTR)lf.lfFaceName, LF_FACESIZE, "Arial" );
if (FAILED(hr))
{
// TODO: write error handler
}
lf.lfCharSet = ANSI_CHARSET;
Функции обратного вызова для EnumFontFamilies и EnumFontFamiliesEx очень похожи. Отличие main заключается в том, что структура ENUMLOGFONTEX содержит поле скрипта.
Обратите внимание, что на основе значений lfCharSet и lfFaceNameEnumFontFamiliesEx будет перечислять один и тот же шрифт столько раз, сколько в шрифте есть разные наборы символов. Это может создать обширный список шрифтов, которые могут быть обременительными для пользователя. Например, шрифт Century Schoolbook может отображаться для прибалтийских, западных, греческих, турецких и кириллических наборов символов. Чтобы избежать этого, приложение должно отфильтровать список шрифтов.
Шрифты для многих восточноазиатских языков имеют два названия шрифтов: английское и локализованное. EnumFonts, EnumFontFamilies и EnumFontFamiliesEx возвращают имя шрифта на английском языке, если языковой стандарт системы не соответствует языку шрифта.
Если для графического режима в контексте устройства задано значение GM_ADVANCED с помощью функции SetGraphicsMode и флаг DEVICE_FONTTYPE передается параметру FontType, эта функция возвращает список шрифтов типа 1 и OpenType в системе. Если для графического режима не задано значение GM_ADVANCED, эта функция возвращает список шрифтов типа 1, OpenType и TrueType в системе.
Примечание
Заголовок wingdi.h определяет EnumFontFamiliesEx как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | wingdi.h (включая Windows.h) |
Библиотека | Gdi32.lib |
DLL | Gdi32.dll |