Функция CreateFontA (wingdi.h)
Функция CreateFont создает логический шрифт с указанными характеристиками. Впоследствии логический шрифт можно выбрать в качестве шрифта для любого устройства.
Синтаксис
HFONT CreateFontA(
[in] int cHeight,
[in] int cWidth,
[in] int cEscapement,
[in] int cOrientation,
[in] int cWeight,
[in] DWORD bItalic,
[in] DWORD bUnderline,
[in] DWORD bStrikeOut,
[in] DWORD iCharSet,
[in] DWORD iOutPrecision,
[in] DWORD iClipPrecision,
[in] DWORD iQuality,
[in] DWORD iPitchAndFamily,
[in] LPCSTR pszFaceName
);
Параметры
[in] cHeight
Высота (в логических единицах) символьной ячейки или символа шрифта. Значение высоты символа (также известное как высота em) — это значение высоты ячейки символов за вычетом значения внутреннего начального значения. Средство сопоставления шрифтов интерпретирует значение, указанное в nHeight , следующим образом.
Значение | Значение |
---|---|
|
Сопоставителя шрифтов преобразует это значение в единицы устройства и сопоставляет его с высотой ячейки доступных шрифтов. |
|
Функция сопоставления шрифтов использует значение высоты по умолчанию при поиске совпадения. |
|
Модуль сопоставления шрифтов преобразует это значение в единицы устройства и сопоставляет его абсолютное значение с высотой символов доступных шрифтов. |
Для всех сравнений высоты сопоставителя шрифтов ищет самый большой шрифт, не превышающий запрошенный размер.
Это сопоставление происходит при первом использовании шрифта.
В режиме сопоставления MM_TEXT можно использовать следующую формулу, чтобы указать высоту шрифта с указанным размером точек:
nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
[in] cWidth
Средняя ширина (в логических единицах) символов запрошенного шрифта. Если это значение равно нулю, метод сопоставления шрифтов выбирает ближайшее значение соответствия. Ближайшее значение соответствия определяется путем сравнения абсолютных значений разницы между пропорциями текущего устройства и оцифрованным соотношением сторон доступных шрифтов.
[in] cEscapement
Угол в десятых градусах между вектором escapement и осью X устройства. Вектор escapement параллелен базовой строке строки текста.
Если для графического режима задано значение GM_ADVANCED, можно указать угол экранирования строки независимо от угла ориентации символов строки.
Если для графического режима задано значение GM_COMPATIBLE, nEscapement задает и экранирование, и ориентацию. Необходимо задать для nEscapement и nOrientation одно и то же значение.
[in] cOrientation
Угол в десятых градусах между базовой линией каждого символа и осью X устройства.
[in] cWeight
Вес шрифта в диапазоне от 0 до 1000. Например, 400 — это нормально, а 700 — полужирный. Если это значение равно нулю, используется вес по умолчанию.
Для удобства определяются следующие значения.
[in] bItalic
Указывает курсивный шрифт, если задано значение TRUE.
[in] bUnderline
Указывает подчеркнутый шрифт, если задано значение TRUE.
[in] bStrikeOut
Шрифт зачеркивать, если задано значение TRUE.
[in] iCharSet
Набор символов. Следующие значения являются предопределенными:
- 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
- JOHAB_CHARSET
- ARABIC_CHARSET
- HEBREW_CHARSET
- THAI_CHARSET
DEFAULT_CHARSET задано значение в зависимости от текущего языкового стандарта системы. Например, если языковой стандарт системы — английский (США), он задается как ANSI_CHARSET.
В операционной системе могут существовать шрифты с другими наборами символов. Если приложение использует шрифт с неизвестным набором символов, оно не должно пытаться перевести или интерпретировать строки, отображаемые с помощью этого шрифта.
Чтобы обеспечить согласованность результатов при создании шрифта, не указывайте OEM_CHARSET или DEFAULT_CHARSET. Если вы указываете имя шрифта в параметре lpszFace , убедитесь, что значение fdwCharSet соответствует набору символов шрифта, указанного в lpszFace.
[in] iOutPrecision
Точность вывода. Точность выходных данных определяет, насколько точно выходные данные должны соответствовать высоте, ширине, ориентации символов, escapement, шагу и типу шрифта. Может быть одним из указанных далее.
Приложения могут использовать значения OUT_DEVICE_PRECIS, OUT_RASTER_PRECIS, OUT_TT_PRECIS и OUT_PS_ONLY_PRECIS для управления тем, как средство сопоставления шрифтов выбирает шрифт, если операционная система содержит несколько шрифтов с указанным именем. Например, если операционная система содержит шрифт Symbol в растровой форме и TrueType, указание OUT_TT_PRECIS заставляет сопоставителя шрифтов выбрать версию TrueType. Указание OUT_TT_ONLY_PRECIS заставляет сопоставителя шрифтов выбирать шрифт TrueType, даже если он должен заменить шрифт TrueType с другим именем.
[in] iClipPrecision
Точность обрезки. Точность обрезки определяет, как обрезать символы, которые частично находятся за пределами области обрезки. Это может быть одно или несколько из следующих значений.
[in] iQuality
Качество вывода. Качество вывода определяет, насколько тщательно GDI должен пытаться сопоставить атрибуты логического шрифта с атрибутами фактического физического шрифта. Может быть одним из указанных далее.
Если качество вывода DEFAULT_QUALITY, DRAFT_QUALITY или PROOF_QUALITY, шрифт будет сглаживается, если системный параметр SPI_GETFONTSMOOTHING имеет значение TRUE. Пользователи могут управлять этим системным параметром из панель управления. (Точная формулировка параметра на панели управления зависит от версии Windows, но это будут слова с эффектом "Гладкие края шрифтов экрана".)
[in] iPitchAndFamily
Шаг и семейство шрифта. Два бита нижнего порядка определяют шаг шрифта и могут иметь одно из следующих значений:
- DEFAULT_PITCH
- FIXED_PITCH
- VARIABLE_PITCH
Приложение может указать значение параметра fdwPitchAndFamily , используя оператор Boolean OR для соединения константы шага с константой семейства.
Семейства шрифтов описывают внешний вид шрифта в общем виде. Они предназначены для указания шрифтов, когда точный запрошенный шрифт недоступен.
[in] pszFaceName
Указатель на строку, завершающуюся значением NULL, которая указывает имя шрифта. Длина этой строки не должна превышать 32 символа, включая завершающий символ NULL. Функцию EnumFontFamilies можно использовать для перечисления имен шрифтов всех доступных в настоящее время шрифтов. Дополнительные сведения см. в разделе «Примечания».
Если lpszFace имеет значение NULL или пустую строку, GDI использует первый шрифт, соответствующий другим указанным атрибутам.
Возвращаемое значение
Если функция выполняется успешно, возвращаемое значение является дескриптором логического шрифта.
Если функция завершается сбоем, возвращается значение NULL.
Комментарии
Если шрифт больше не нужен, вызовите функцию DeleteObject , чтобы удалить его.
Чтобы защитить авторские права поставщиков, которые предоставляют шрифты для Windows, приложения должны всегда сообщать точное имя выбранного шрифта. Так как доступные шрифты могут отличаться от системы к системе, не следует предполагать, что выбранный шрифт всегда совпадает с запрошенным шрифтом. Например, если вы запросите шрифт Palatino, но такой шрифт недоступен в системе, средство сопоставления шрифтов заменит шрифт с похожими атрибутами, но с другим именем. Всегда сообщайте пользователю имя выбранного шрифта.
Чтобы получить соответствующий шрифт в разных языковых версиях ОС, вызовите EnumFontFamiliesEx с требуемыми характеристиками шрифта в структуре LOGFONT , а затем получите соответствующее имя шрифта и создайте шрифт с помощью CreateFont или CreateFontIndirect.
Сопоставление шрифтов для CreateFont, CreateFontIndirect и CreateFontIndirectEx распознает как английский, так и локализованное имя шрифта независимо от языкового стандарта.
Следующие ситуации не поддерживают сглаживание ClearType.
- Текст, отображаемый на принтере.
- Набор для отображения не более 256 цветов.
- Текст, отображаемый клиенту сервера терминалов.
- Шрифт не является шрифтом TrueType или Шрифтом OpenType с контурами TrueType. Например, следующее не поддерживает сглаживание ClearType: шрифты Типа 1, шрифты OpenType Postscript без контуров TrueType, точечные шрифты, векторные шрифты и шрифты устройств.
- Шрифт настраивает внедренные растровые изображения только для размеров шрифтов, содержащих внедренные растровые изображения. Например, это обычно происходит в восточноазиатских шрифтах.
Примеры
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_PAINT:
{
RECT rect;
HFONT hFontOriginal, hFont1, hFont2, hFont3;
hdc = BeginPaint(hWnd, &ps);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 48 pixels in height.
//The width, when set to 0, will cause the font mapper to choose the closest matching value.
//The font face name will be Impact.
hFont1 = CreateFont(48,0,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Impact"));
hFontOriginal = (HFONT)SelectObject(hdc, hFont1);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 100,100,700,200);
SetTextColor(hdc, RGB(255,0,0));
DrawText(hdc, TEXT("Drawing Text with Impact"), -1,&rect, DT_NOCLIP);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
//The width, when set to 20, will cause the font mapper to choose a font which, in this case, is stretched.
//The font face name will be Times New Roman. This time nEscapement is at -300 tenths of a degree (-30 degrees)
hFont2 = CreateFont(36,20,-300,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Times New Roman"));
SelectObject(hdc,hFont2);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 100, 200, 900, 800);
SetTextColor(hdc, RGB(0,128,0));
DrawText(hdc, TEXT("Drawing Text with Times New Roman"), -1,&rect, DT_NOCLIP);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
//The width, when set to 10, will cause the font mapper to choose a font which, in this case, is compressed.
//The font face name will be Arial. This time nEscapement is at 250 tenths of a degree (25 degrees)
hFont3 = CreateFont(36,10,250,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY, VARIABLE_PITCH,TEXT("Arial"));
SelectObject(hdc,hFont3);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 500, 200, 1400, 600);
SetTextColor(hdc, RGB(0,0,255));
DrawText(hdc, TEXT("Drawing Text with Arial"), -1,&rect, DT_NOCLIP);
SelectObject(hdc,hFontOriginal);
DeleteObject(hFont1);
DeleteObject(hFont2);
DeleteObject(hFont3);
EndPaint(hWnd, &ps);
break;
}
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
Другой пример см. в разделе Настройка шрифтов для Menu-Item текстовых строк в разделе Использование меню.
Примечание
Заголовок wingdi.h определяет CreateFont как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | wingdi.h (включая Windows.h) |
Библиотека | Gdi32.lib |
DLL | Gdi32.dll |
См. также раздел
EnumFontFamilies