Функция CreateFont

Функция 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           // имя гарнитуры шрифта
);

Параметры

nHeight
[in] Устанавливает высоту, в логических единицах измерения, символьного знакоместа или буквы шрифта. Значение высоты символа (также известное как em высота) - это значение высоты символьного знакоместа, минус значение пустого пространства над знаком. Механизм отображения логического шрифта в физический воспринимает значение, заданное в параметре nHeight нижеследующим способом.
Значение Предназначение
> 0 Механизм отображения логического шрифта в физический преобразует это значение в единицы измерения устройства (пиксели) и соответствует ему в зависимости от высоты ячеек символов доступных шрифтов. 
0 Механизм отображения логического шрифта в физический использует заданное по умолчанию значение высоты, когда он ищет соответствие шрифтов. 
< 0 Механизм отображения логического шрифта в физический преобразует это значение в единицы измерения устройства (пиксели) и соответствует его абсолютной величине в зависимости от высоты символа доступных шрифтов. 
 

Из всех сравниваемых высот, механизм отображения логического шрифта в физический ищет самый большой шрифт, который не выходит за пределы требуемого размера

Это отображение происходит тогда, когда шрифт используется впервые.

Для режима отображения MM_TEXT , Вы можете использовать нижеследующую формулу, чтобы задать высоту для шрифта с размером фиксированной точки:

nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
nWidth
[in] Устанавливает среднюю ширину, в логических единицах измерения, символов в требуемом шрифте. Если это значение обнуляется, механизм отображения логического шрифта в физический выбирает самое близкое значение соответствия. Самое близкое значение соответствия обуславливается сравнением абсолютных величин разности между отношением ширины знака к его высоте текущего устройства и цифровым отношением ширины знака к его высоте доступных шрифтов.
nEscapement
[in] Устанавливает угол, в десятых градуса, между вектором наклона и осью X устройства. Вектор наклона параллелен основной линии ряда текста.

Windows NT /2000/XP: Когда графический режим установлен в значение GM_ADVANCED, Вы можете задавать угол наклона строки независимо от угла ориентации букв строки.

Когда графический режим установлен в GM_COMPATIBLE, nEscapement устанавливает, и наклон и ориентацию. Вам следует устанавливать параметры nEscapement и nOrientation в одно и то же значение.
 
Windows 95/98/Me: Параметр nEscapement устанавливает, и наклон, и ориентацию. Вам следует устанавливать параметры nEscapement и nOrientation в одно и то же значение.
 
nOrientation
[in] Устанавливает угол, в десятых градуса, между основной линией каждого символа и осью X устройства.
fnWeight
[in] Устанавливает толщину шрифта в диапазоне от 0 до 1000. Например, 400 - шрифт нормальный, а 700 - полужирный. Если это значение нулевое, используется заданная по умолчанию толщина .

Нижеследующие значения определены для удобства.

Значение Толщина
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
 
fdwItalic
[in] Если установлен в значение TRUE (ИСТИНА), определяет курсивный шрифт.
fdwUnderline
[in] Если установлен в значение TRUE (ИСТИНА), определяет подчеркнутый шрифт.
fdwStrikeOut
[in] Если установлен в значение TRUE (ИСТИНА), определяет зачеркнутый шрифт.
fdwCharSet
[in] Устанавливает набор символов. Нижеследующие значения предопределены:

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

Версия Windows на крейском языке :
JOHAB_CHARSET
Версия Windows для Среднего Востока:
ARABIC_CHARSET
HEBREW_CHARSET
Версия Windows на тайском языке :
THAI_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, шрифт другого названия.

fdwClipPrecision
[in] Устанавливает точность отсечения по границам. Точность отсечения по границам определяет, как обрезать буквы, которые находятся частично вне области прорисовки. Параметр может состоять из одного или нескольких нижеследующих значений.

 

Значение Предназначение
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 Не используется. 
fdwQuality
[in] Устанавливает качество вывода данных. Качество вывода данных определяет, с какой величиной точности GDI должен пытаться согласовывать атрибуты логического шрифта с такими же атрибутами реального физического шрифта. Этот параметр может быть одним из следующих значений.

 

Значение Предназначение
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).

fdwPitchAndFamily
[in] Устанавливает шаг между символами и семейство шрифта. Два младших бита задают шаг шрифта и могут быть одним из следующих значений:

Четыре старших бита задают семейство шрифта и могут быть одним из следующих значений.

 

Значение Описание
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
[in] Указатель на символьную строку с нулем в конце, которая устанавливает имя гарнитуры шрифта. Длина этой строки не должна выходить за пределы 32 символов, включая в себя нулевой признак конца. Функция EnumFontFamilies может быть использована для перечисления названий гарнитуры шрифта всех текущих доступных шрифтов. Для получения дополнительной информации, см. раздел Замечания.

Если параметр 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:

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

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz