Функция EnumFontFamiliesExW (wingdi.h)
Функция EnumFontFamiliesEx перечисляет все уникальные именованные шрифты в системе, которые соответствуют характеристикам шрифта, указанным в структуре LOGFONT. EnumFontFamiliesEx перечисляет шрифты на основе имени шрифта, набора символов или обоих.
Синтаксис
int EnumFontFamiliesExW(
[in] HDC hdc,
[in] LPLOGFONTW lpLogfont,
[in] FONTENUMPROCW lpProc,
[in] LPARAM lParam,
DWORD dwFlags
);
Параметры
[in] hdc
Дескриптор контекста устройства, из которого перечисляются шрифты.
[in] lpLogfont
Указатель на структуру LOGFONT, содержащую сведения о шрифтах для перечисления. Функция проверяет следующие элементы.
Член | Описание |
---|---|
lfCharSet | Если задано значение DEFAULT_CHARSET, функция перечисляет все однозначно именованные шрифты во всех наборах символов. (Если есть два шрифта с одинаковым именем, перечисляется только один.) Если задано допустимое значение набора символов, функция перечисляет только шрифты в указанном наборе символов. |
lfFaceName | Если задано значение пустой строки, функция перечисляет один шрифт в каждом доступном имени шрифта. Если задано допустимое имя шрифта, функция перечисляет все шрифты с указанным именем. |
lfPitchAndFamily | Для всех языковых версий операционной системы должно быть установлено значение нулю. |
[in] lpProc
Указатель на определяемую приложением функцию обратного вызова. Дополнительные сведения см. в функции EnumFontFamExProc.
[in] lParam
Определенное приложением значение. Функция передает это значение функции обратного вызова вместе с сведениями о шрифте.
dwFlags
Этот параметр не используется и должен быть равен нулю.
Возвращаемое значение
Возвращаемое значение является последним значением, возвращаемым функцией обратного вызова. Это значение зависит от того, какие семейства шрифтов доступны для указанного устройства.
Замечания
Функция EnumFontFamiliesEx не использует помеченные имена шрифтов для идентификации наборов символов. Вместо этого он всегда передает правильное имя шрифта и отдельное значение набора символов функции обратного вызова. Функция перечисляет шрифты на основе значений lfCharSet и элементов lfFaceName в структуре LOGFON T.
Как и EnumFontFamilies, EnumFontFamiliesEx перечисляет все стили шрифтов. Не все стили шрифта охватывают одинаковые наборы символов. Например, Fontorama Bold может содержать символы ANSI, греческие и кирилличные символы, но Шрифторама Курсив может содержать только символы 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 очень похожи. Основное различие заключается в том, что структура ENUMLOGFONTEX включает поле скрипта.
Обратите внимание, что на основе значений lfCharSet и lfFaceName, EnumFontFamiliesEx перечисляет тот же шрифт, что и разные наборы символов в шрифте. Это может создать обширный список шрифтов, которые могут быть обременительными для пользователя. Например, шрифт Schoolbook Century может отображаться для наборов символов "Балтика", "Западный", "Греческий", "Турецкий" и "Кириллический". Чтобы избежать этого, приложение должно фильтровать список шрифтов.
Шрифты для многих языков Восточной Азии имеют два названия шрифтов: английское имя и локализованное имя. EnumFonts, EnumFontFamiliesи EnumFontFamiliesEx возвращает имя английского шрифта, если языковой стандарт системы не соответствует языку шрифта.
Если для контекста устройства задан режим графики, GM_ADVANCED с помощью функции SetGraphicsMode, а флаг DEVICE_FONTTYPE передается параметру FontType, эта функция возвращает список шрифтов типа 1 и OpenType в системе. Если графический режим не задан для GM_ADVANCED, эта функция возвращает список шрифтов типа 1, OpenType и TrueType в системе.
Заметка
Заголовок wingdi.h определяет EnumFontFamiliesEx как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 2000 Профессиональный [только классические приложения] |
минимальный поддерживаемый сервер | Windows 2000 Server [только классические приложения] |
целевая платформа | Виндоус |
заголовка | wingdi.h (включая Windows.h) |
библиотеки |
Gdi32.lib |
DLL | Gdi32.dll |
См. также
шрифтов и текста