Функция CreateFont создает логический шрифт с заданными характеристиками. Логический шрифт может впоследствии быть выбран как шрифт для любого устройства.
Синтаксис
HFONT CreateFont( int nHeight, // высота шрифта int nWidth, // средняя ширина символа int nEscapement, // угол наклона int nOrientation, // угол ориентации базисной линии int fnWeight, // толщина шрифта DWORD fdwItalic, // описатель параметра курсивного шрифта DWORD fdwUnderline, // описатель параметра подчеркивания DWORD fdwStrikeOut, // описатель параметра зачеркивания DWORD fdwCharSet, // идентификатор набора символов DWORD fdwOutputPrecision, // точность вывода DWORD fdwClipPrecision, // точность отсечения DWORD fdwQuality, // качество вывода DWORD fdwPitchAndFamily, // шаг между символами шрифта и семейство LPCTSTR lpszFace // имя гарнитуры шрифта ); |
Значение | Предназначение |
---|---|
> 0 | Механизм отображения логического шрифта в физический преобразует это значение в единицы измерения устройства (пиксели) и соответствует ему в зависимости от высоты ячеек символов доступных шрифтов. |
0 | Механизм отображения логического шрифта в физический использует заданное по умолчанию значение высоты, когда он ищет соответствие шрифтов. |
< 0 | Механизм отображения логического шрифта в физический преобразует это значение в единицы измерения устройства (пиксели) и соответствует его абсолютной величине в зависимости от высоты символа доступных шрифтов. |
Из всех сравниваемых высот, механизм отображения логического шрифта в физический ищет самый большой шрифт, который не выходит за пределы требуемого размера
Это отображение происходит тогда, когда шрифт используется впервые.
Для режима отображения
MM_TEXT , Вы можете использовать нижеследующую формулу, чтобы задать высоту для шрифта с размером фиксированной точки:
nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72); |
Windows NT /2000/XP: Когда графический режим установлен в значение GM_ADVANCED, Вы можете задавать угол наклона строки независимо от угла ориентации букв строки.
Нижеследующие значения определены для удобства.
Значение | Толщина |
---|---|
FW_DONTCARE | 0 |
FW_THIN | 100 |
FW_EXTRALIGHT | 200 |
FW_ULTRALIGHT | 200 |
FW_LIGHT | 300 |
FW_NORMAL | 400 |
FW_REGULAR | 400 |
FW_MEDIUM | 500 |
FW_SEMIBOLD | 600 |
FW_DEMIBOLD | 600 |
FW_BOLD | 700 |
FW_EXTRABOLD | 800 |
FW_ULTRABOLD | 800 |
FW_HEAVY | 900 |
FW_BLACK | 900 |
ANSI_CHARSET
BALTIC_CHARSET
CHINESEBIG5_CHARSET
DEFAULT_CHARSET
EASTEUROPE_CHARSET
GB2312_CHARSET
GREEK_CHARSET
HANGUL_CHARSET
MAC_CHARSET
OEM_CHARSET
RUSSIAN_CHARSET
SHIFTJIS_CHARSET
SYMBOL_CHARSET
TURKISH_CHARSET
VIETNAMESE_CHARSET
Значение OEM_CHARSET устанавливает набор символов, который является зависимым от операционной системы.
Windows 95/98/Me: Вы можете использовать значение DEFAULT_CHARSET, чтобы дать возможность через имя и размер шрифта полностью описать логический шрифт. Если заданное имя шрифта не существует, может быть использован шрифт от любого набора символов вместо заданного шрифта, так что вам следует использовать DEFAULT_CHARSET разумно, чтобы избежать неожиданных результатов.
Windows NT/2000/XP: DEFAULT_CHARSET устанавливается в значение, основанное на текущем языке конкретной страны в системе. Например, когда язык конкретной страны в системе - Английский язык (Соединенные Штаты), он устанавливается как ANSI_CHARSET.
В операционной системе могут существовать
шрифты с другими наборами символов. Если приложение использует шрифт с неизвестным набором символов, оно не должно пытаться преобразовывать или рассматривать строки, которые предоставлены при помощи этого шрифта.
Чтобы гарантировать непротиворечивые результаты при создании шрифта, не устанавливайте значения OEM_CHARSET или DEFAULT_CHARSET. Если Вы задаете имя гарнитуры шрифта в параметре lpszFace , удостоверьтесь, что значение параметра fdwCharSet соответствует набору символов гарнитуры шрифта, заданной в lpszFace.
fdwOutputPrecision
[in] Устанавливает точность вывода данных. Точность вывода данных определяет, как близко вывод данных должен соответствовать высоте требуемого шрифта, ширине, ориентации символов, углу, под которым печатается шрифт, наклону и типу шрифта. Это может быть одним из нижеследующих значений.
Значение | Предназначение |
---|---|
OUT_CHARACTER_PRECIS | Не используется. |
OUT_DEFAULT_PRECIS | Устанавливает заданное по умолчанию поведение механизма отображения логического шрифта в физический. |
OUT_DEVICE_PRECIS | Указывает механизму отображения логического шрифта в физический, какой выбрать шрифт устройства, когда система содержит многочисленные шрифты с тем же самым именем. |
OUT_OUTLINE_PRECIS | Windows NT/2000/XP: Это значение указывает механизму отображения логического шрифта в физический, что выбрать из шрифта формата TrueType и других шрифтов на основе контура. |
OUT_RASTER_PRECIS | Указывает механизму отображения логического шрифта в физический, какой выбрать растровый шрифт, когда система содержит многочисленные шрифты с тем же самым именем. |
OUT_STRING_PRECIS | Это значение не используется механизмом отображения логического шрифта в физический, но оно возвращается, когда перечисляются растровые шрифты. |
OUT_STROKE_PRECIS |
Windows NT/2000/XP:
Это значение
не используется механизмом отображения
логического шрифта в физический, но оно
возвращается, когда шрифты формата TrueType,
другие основанные на контуре и
векторные шрифты перечисляются.
Windows 95/98/Me: Это значение используется для отображения векторных шрифтов и возвращается тогда, когда шрифт формата TrueType или векторные шрифты перечисляются. |
OUT_TT_ONLY_PRECIS | Указывает механизму отображения логического шрифта в физический, что надо выбрать только из числа масштабируемых (TrueType) шрифтов. Если установленных шрифтов TrueType в системе нет, механизм отображения логического шрифта в физический возвращает характер работы определенный по умолчанию. |
OUT_TT_PRECIS | Указывает механизму отображения логического шрифта в физический, какой выбрать масштабируемый (TrueType) шрифт, когда система содержит многочисленные шрифты с тем же самым именем. |
Прикладные программы могут использовать значения OUT_DEVICE_PRECIS, OUT_RASTER_PRECIS и OUT_TT_PRECIS, чтобы управлять механизмом отображения логического шрифта в физический при выборе шрифта, когда операционная система содержит больше чем один шрифт с заданным именем. Например, если операционная система содержит шрифт, по имени Symbol в растровой форме и в формате TrueType, установка флажка OUT_TT_PRECIS заставляет механизм отображения логического шрифта в физический выбрать версию формата TrueType. Определение флажка OUT_TT_ONLY_PRECIS заставляет механизм отображения логического шрифта в физический выбрать масштабируемый шрифт TrueType , даже если он должен использовать вместо заданного шрифта TrueType, шрифт другого названия.
Значение | Предназначение |
---|---|
CLIP_DEFAULT_PRECIS | Устанавливает значение характера работы отсечения по умолчанию. |
CLIP_CHARACTER_PRECIS | Не используется. |
CLIP_STROKE_PRECIS |
Не используется
механизмом отображения логического
шрифта в физический, но возвращается,
когда растровый, векторный или
масштабируемые (TrueType) шрифты
перечисляются.
Windows NT/2000/XP: Для совместимости, это значение всегда возвращается при перечислении шрифтов. |
CLIP_MASK | Не используется. |
CLIP_EMBEDDED | Вы должны установить этот флажок, чтобы использовать внедренный шрифт только для чтения. |
CLIP_LH_ANGLES |
Когда это
значение используется, вращение всех
шрифтов зависит от того, является ли
ориентация системы координат
левосторонней или правосторонней.
Если оно не используется, шрифты устройства всегда вращаются против часовой стрелки, но вращение других шрифтов зависит от ориентации системы координат. Для получения дополнительной информации об ориентации систем координат, см. описание параметра nOrientation. |
CLIP_TT_ALWAYS | Не используется. |
Значение | Предназначение |
---|---|
ANTIALIASED_QUALITY |
Windows NT 4.0 и позже: Шрифт
выравнивается или приглаживается, если
шрифт поддерживает эти технологии, и
размер шрифта не слишком маленький или
не слишком большой.
Windows 95 с Plus!, Windows 98/Me: Вывод на экран должен иметь большие чем 8-разрядный цвет, это должно быть единое плоское устройство, флажок не может применяться при выводе на экран палитры, и он не может применяться при установке программы для вывода на экран нескольких мониторов. Кроме того, Вы должны выбрать масштабируемый (TrueType) шрифт для экранного DC (контекста устройства) до использования его в DIBSection, в противном случае сглаживания не происходит. Примечание переводчика. DIBSection - DIB секция, это аппаратно-независимая структура данных для растрового представления выводимых на экран объектов из видеопамяти. |
CLEARTYPE_QUALITY | Windows XP: Если флажок установлен, текст представляется (когда это возможно) используя метод сглаживания ClearType. Для получения дополнительной информации см. секцию Замечания. |
DEFAULT_QUALITY | Внешний вид шрифта не имеет значения. |
DRAFT_QUALITY | Внешний вид шрифта менее важен чем тогда, когда используется значение PROOF_QUALITY . Для растровых шрифтов GDI, включено масштабирование, которое означает то, что большему количеству шрифтов доступно изменение размера, но качество может быть более низкое. Полужирный, курсивный, подчеркнутый и зачеркнутый шрифты синтезируются, в случае необходимости. |
NONANTIALIASED_QUALITY | Windows 95 с Plus!, Windows 98/Me, Windows NT 4.0 и позже: Шрифт никогда не выравнивается, то есть сглаживание шрифта не делается. |
PROOF_QUALITY | Качество символов шрифта более важно, чем точное соответствие атрибутов логического шрифта. Для растровых шрифтов GDI, масштабирование заблокировано, и выбирается шрифт, самый близкий по величине. Хотя выбранный размер шрифта не может быть отображен точно, когда используется флажок PROOF_QUALITY , качество шрифта высокое и не имеется никаких искажений внешнего вида. Полужирный, курсивный, подчеркнутый и зачеркнутый шрифты синтезируются, в случае необходимости. |
Если ни ANTIALIASED_QUALITY ни NONANTIALIASED_QUALITY не выбран, шрифт выравнивается, только в том случае, если пользователь выбирает " гладкие экранные шрифты " в Панели управления (Windows).
Четыре старших бита задают семейство шрифта и могут быть одним из следующих значений.
Значение | Описание |
---|---|
FF_DECORATIVE | Нововведенные шрифты. Пример - Old English. |
FF_DONTCARE | Безразличное состояние или незнакомый шрифт. |
FF_MODERN | Шрифты с постоянной шириной штриха, с или без засечек.Пример - Pica, Elite и Courier New®. |
FF_ROMAN | Шрифт с переменной шириной штриха и с засечками. Пример - MS® Serif. |
FF_SCRIPT | Шрифты разработанные по виду подобно рукописным шрифтам. Пример - Script и Cursive. |
FF_SWISS | Шрифты с переменной шириной штриха и без засечек. Пример - MS Sans Serif. |
Приложение может устанавливать значение для параметра
fdwPitchAndFamily при помощи использования Булева оператора OR, чтобы соединить именованную константу шага с именованной константой семейства.Семейства шрифта описывают вид шрифта одним общим способом. Они предназначены для определения шрифтов, когда точная требуемая гарнитура шрифта не доступна.
Если параметр
lpszFace имеет значение ПУСТО (NULL) или пустую строку, GDI использует первый шрифт, который соответствует другим заданным атрибутам.Если функция завершается успешно, величина возвращаемого значения - дескриптор логического шрифта.
Если функция завершается с ошибкой, величина возвращаемого значения - ПУСТО (NULL).
Windows NT/2000/XP: Чтобы получить дополнительную информацию об ошибке, вызовите функцию GetLastError.
Когда Вы больше не нуждаетесь в шрифте, вызовите функцию
DeleteObject, чтобы удалить его.Чтобы помочь защитить авторские права продавцов, которые предоставляют шрифты для Windows, прикладные программы, должны всегда сообщать точное имя выбранного шрифта. Поскольку доступные шрифты могут изменяться от системы к системы, не предполагайте, что выбранный шрифт - всегда то же самое, что и требуемый шрифт. Например, если Вы запрашиваете шрифт, по имени
Palatino, но такой шрифт не доступен в системе, механизм отображения логического шрифта в физический использует вместо него шрифт, который имеет похожие атрибуты, но другое название. Всегда сообщайте имя выбранного шрифта пользователю.Чтобы получать подходящий шрифт на различных версиях языка оперативной системы, вызовите функцию EnumFontFamiliesEx с нужными характеристиками шрифта в структуре LOGFONT, затем извлеките подходящую гарнитуру шрифта, назовите и создайте шрифт, используя функцию CreateFont или CreateFontIndirect.
Windows 95/98/Me, Windows NT 4.0: Шрифты для многих Восточно-Азиатских языков имеют два названия гарнитуры шрифта: Английское название и название, привязанное к конкретной стране. Функции CreateFont, CreateFontIndirect и CreateFontIndirectEx берут привязанное к конкретной стране название гарнитуры шрифта в локальной системе, которое соответствует языку в ней, но они берут английское название гарнитуры шрифта на всех других языках локальной системы. Самый лучший способ состоит в том, чтобы попробовать одно имя и, при неудаче, попробовать другое.
Обратите внимание! на то, что функции EnumFonts, EnumFontFamilies и EnumFontFamiliesEx возвращают английское название гарнитуры шрифта, если язык конкретной страны в системе не соответствует языку шрифта. |
Windows 2000/XP: Механизм отображения логического шрифта в физический для CreateFont, CreateFontIndirect, и CreateFontIndirectEx признает, и английское и привязанное к конкретной стране название гарнитуры шрифта, независимо от совокупности родственных национальных языков местности.
Windows XP:
Нижеследующие
ситуации не поддерживают сглаживание
методом ClearType:
TrueType шрифт
или не шрифт Единого формата (OpenType) с
контурами TrueType. Например, нижеследующие
шрифты не поддерживают сглаживания
методом ClearType:
Type
1, Postscript
OpenType
без контуров
TrueType, растровые шрифты,
векторные шрифты и шрифты устройств.
Windows 95/98/Me: CreateFontW поддерживается подпрограммой Microsoft Layer for Unicode. Чтобы использовать ее, Вы должны добавить некоторые файлы к вашему приложению, как изложено в требованиях этой подпрограммы для систем Windows 95/98/Me.
Пример смотри в статье Установка шрифта текстовых строк пунктов меню.
Обзор шрифты и текст, Функции, используемые шрифтами и текстом, CreateFontIndirect, CreateFontIndirectEx, DeleteObject, EnumFonts, EnumFontFamilies, EnumFontFamiliesEx, SelectObject, LOGFONT
Размещение и совместимость CreateFont |
|
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 |
Замечания по платформе |
Не имеется |