Поделиться через


Функция CreateFontW (wingdi.h)

Функция CreateFont создает логический шрифт с указанными характеристиками. Логический шрифт можно выбрать в качестве шрифта для любого устройства.

Синтаксис

HFONT CreateFontW(
  [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] LPCWSTR pszFaceName
);

Параметры

[in] cHeight

Высота в логических единицах символьной ячейки или символа шрифта. Значение высоты символа (также известное как высота em) — это значение высоты ячейки символов минус внутреннее начальное значение. Средство сопоставления шрифтов интерпретирует значение, указанное в nHeight следующим образом.

Ценность Значение
> 0
Приложение сопоставления шрифтов преобразует это значение в единицы устройства и сопоставляет его с высотой ячейки доступных шрифтов.
0
Сопоставление шрифтов использует значение высоты по умолчанию при поиске совпадения.
< 0
Модуль сопоставления шрифтов преобразует это значение в единицы устройства и соответствует абсолютному значению с высотой символов доступных шрифтов.
 

Для всех сравнений высот в схеме шрифтов выполняется поиск самого большого шрифта, который не превышает запрошенный размер.

Это сопоставление возникает при первом использовании шрифта.

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


nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);

[in] cWidth

Средняя ширина в логических единицах символов в запрошенном шрифте. Если это значение равно нулю, функция сопоставления шрифтов выбирает ближайшее значение соответствия. Ближайшее значение соответствия определяется путем сравнения абсолютных значений разницы между соотношением аспектов текущего устройства и цифризованным соотношением аспектов доступных шрифтов.

[in] cEscapement

Угол в десятых градусах между вектором сбега и осью x устройства. Вектор escapement параллелен базовой строке строки текста.

Если для режима графики задано значение GM_ADVANCED, можно указать угол escapeмента строки независимо от угла ориентации символов строки.

Если для графического режима задано значение GM_COMPATIBLE, nEscapement указывает и escapement, и ориентацию. Необходимо задать nEscapement и nOrientation одинаковое значение.

[in] cOrientation

Угол в десятых градусах между базовой линией каждого символа и осью x устройства.

[in] cWeight

Вес шрифта в диапазоне от 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

[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
Корейский языковой выпуск Windows:
  • JOHAB_CHARSET
Выпуск Windows на ближнем Востоке:
  • ARABIC_CHARSET
  • HEBREW_CHARSET
Выпуск Windows на языке тайского языка:
  • THAI_CHARSET
Значение OEM_CHARSET указывает набор символов, зависящий от операционной системы.

DEFAULT_CHARSET задано значение на основе текущего языкового стандарта системы. Например, если языковой стандарт системы является английским (США), он устанавливается как ANSI_CHARSET.

Шрифты с другими наборами символов могут существовать в операционной системе. Если приложение использует шрифт с неизвестным набором символов, он не должен пытаться переводить или интерпретировать строки, которые отображаются с помощью этого шрифта.

Чтобы обеспечить согласованные результаты при создании шрифта, не указывайте OEM_CHARSET или DEFAULT_CHARSET. Если указать имя шрифта в параметре lpszFace, убедитесь, что значение fdwCharSet соответствует набору символов шрифта, указанного в lpszFace.

[in] iOutPrecision

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

Ценность Значение
OUT_CHARACTER_PRECIS
Не используется.
OUT_DEFAULT_PRECIS
Поведение сопоставления шрифтов по умолчанию.
OUT_DEVICE_PRECIS
Указывает схеме шрифтов выбрать шрифт устройства, если система содержит несколько шрифтов с одинаковым именем.
OUT_OUTLINE_PRECIS
Это значение указывает схеме шрифтов выбрать из TrueType и других шрифтов на основе структуры.
OUT_PS_ONLY_PRECIS
Указывает схеме шрифтов выбрать только шрифты PostScript. Если в системе нет шрифтов PostScript, функция сопоставления шрифтов возвращается к поведению по умолчанию.
OUT_RASTER_PRECIS
Указывает карте шрифта выбрать растровый шрифт, если система содержит несколько шрифтов с одинаковым именем.
OUT_STRING_PRECIS
Это значение не используется картой шрифтов, но возвращается при перечислении растровых шрифтов.
OUT_STROKE_PRECIS
Это значение не используется картой шрифтов, но возвращается при перечислении TrueType, других шрифтов на основе структуры и векторных шрифтов.
OUT_TT_ONLY_PRECIS
Указывает схеме шрифтов выбрать только шрифты TrueType. Если в системе нет шрифтов TrueType, функция сопоставления шрифтов возвращается в поведение по умолчанию.
OUT_TT_PRECIS
Указывает карте шрифта выбрать шрифт TrueType, если система содержит несколько шрифтов с одинаковым именем.
 

Приложения могут использовать значения OUT_DEVICE_PRECIS, OUT_RASTER_PRECIS, OUT_TT_PRECIS и OUT_PS_ONLY_PRECIS, чтобы управлять тем, как средство сопоставления шрифтов выбирает шрифт, если операционная система содержит несколько шрифтов с указанным именем. Например, если операционная система содержит шрифт с именем Символ в виде растра и TrueType, указывая, OUT_TT_PRECIS заставляет сопоставителя шрифтов выбрать версию TrueType. Указание OUT_TT_ONLY_PRECIS заставляет средство сопоставления шрифтов выбрать шрифт TrueType, даже если он должен заменить шрифт TrueType другого имени.

[in] iClipPrecision

Точность вырезки. Точность вырезки определяет, как вырезать символы, которые частично находятся за пределами области вырезки. Это может быть одно или несколько следующих значений.

Ценность Значение
CLIP_CHARACTER_PRECIS
Не используется.
CLIP_DEFAULT_PRECIS
Указывает поведение вырезки по умолчанию.
CLIP_DFA_DISABLE
Windows XP с пакетом обновления 1 (SP1): отключает связь шрифта для шрифта. Обратите внимание, что этот флаг не гарантирует никакого влияния на любую платформу после Windows Server 2003.
CLIP_EMBEDDED
Этот флаг необходимо указать для использования внедренного шрифта только для чтения.
CLIP_LH_ANGLES
Если это значение используется, поворот для всех шрифтов зависит от того, является ли ориентация системы координат левой или правой рукой.

Если не используется, шрифты устройств всегда поворачиваются по счетчику, но поворот других шрифтов зависит от ориентации системы координат.

Дополнительные сведения о ориентации систем координат см. в описании параметра nOrientation

CLIP_MASK
Не используется.
CLIP_DFA_OVERRIDE
Отключает связь шрифта для шрифта. Это идентично CLIP_DFA_DISABLE, но может иметь проблемы в некоторых ситуациях; Рекомендуемый флаг используется CLIP_DFA_DISABLE.
CLIP_STROKE_PRECIS
Не используется картой шрифта, но возвращается при перечислении шрифтов растра, вектора или TrueType.

Для совместимости это значение всегда возвращается при перечислении шрифтов.

CLIP_TT_ALWAYS
Не используется.

[in] iQuality

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

Ценность Значение
ANTIALIASED_QUALITY
Шрифт сглаживается или сглаживается, если шрифт поддерживает его и размер шрифта не слишком мал или слишком велик.
CLEARTYPE_QUALITY
Если задано, текст отрисовывается (по возможности) с помощью метода защиты от ClearType. Дополнительные сведения см. в примечаниях.
DEFAULT_QUALITY
Внешний вид шрифта не имеет значения.
DRAFT_QUALITY
Внешний вид шрифта менее важен, чем при использовании значения PROOF_QUALITY. Для шрифтов растров GDI масштабирование включено, что означает, что доступны дополнительные размеры шрифтов, но качество может быть ниже. При необходимости синтезируются полужирные, курсивные, подчеркивание и шрифты удара.
NONANTIALIASED_QUALITY
Шрифт никогда не является антиалиасным, т. е. не выполняется сглаживание шрифта.
PROOF_QUALITY
Качество символов шрифта является более важным, чем точное сопоставление атрибутов логического шрифта. Для шрифтов растров GDI масштабирование отключено, а шрифт, ближайший к размеру, выбран. Несмотря на то, что выбранный размер шрифта не может быть сопоставлен точно при использовании PROOF_QUALITY, качество шрифта является высоким и отсутствует искажение внешнего вида. При необходимости синтезируются полужирные, курсивные, подчеркивание и шрифты удара.
 

Если качество выходных данных DEFAULT_QUALITY, DRAFT_QUALITY или PROOF_QUALITY, то шрифт будет антиализамирован, если системный параметр SPI_GETFONTSMOOTHING TRUE. Пользователи могут управлять этим системным параметром на панели управления. (Точное формулировка параметра на панели управления зависит от версии Windows, но это будут слова в эффекте "Гладкие края шрифтов экрана".

[in] iPitchAndFamily

Поле и семейство шрифта. Два бита с низким порядком указывают шаг шрифта и могут быть одним из следующих значений:

  • DEFAULT_PITCH
  • FIXED_PITCH
  • VARIABLE_PITCH
Четыре бита с высоким порядком указывают семейство шрифтов и могут быть одним из следующих значений.
Ценность Значение
FF_DECORATIVE
Новизны шрифтов. Старый английский является примером.
FF_DONTCARE
Используйте шрифт по умолчанию.
FF_MODERN
Шрифты с шириной росчерка констант, с засечками или без нее. Пика, Элита и Курьер New являются примерами.
FF_ROMAN
Шрифты с шириной штриха переменной и с засечками. Ms Serif — пример.
FF_SCRIPT
Шрифты, предназначенные для рукописного ввода. Скрипт и cursive являются примерами.
FF_SWISS
Шрифты с шириной штриха переменной и без засечек. ГОСПОЖА? Sans Serif является примером.
 

Приложение может указать значение для параметра fdwPitchAndFamily с помощью логического оператора OR для присоединения константы тона к семейной константе.

Семейства шрифтов описывают внешний вид шрифта общим образом. Они предназначены для указания шрифтов, когда запрошенный точный шрифт недоступен.

[in] pszFaceName

Указатель на строку, завершающую значение NULL, указывающую имя шрифта. Длина этой строки не должна превышать 32 символов, включая завершающий символ NULL. Функцию EnumFontFamilies можно использовать для перечисления имен шрифтов всех доступных в настоящее время шрифтов. Дополнительные сведения см. в примечаниях.

Если lpszFacenull или пустая строка, GDI использует первый шрифт, соответствующий другим указанным атрибутам.

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение является дескриптором логического шрифта.

Если функция завершается ошибкой, возвращаемое значение равно NULL.

Замечания

Если шрифт больше не нужен, вызовите функцию deleteObject .

Чтобы защитить авторские права поставщиков, предоставляющих шрифты для Windows, приложения всегда должны сообщать точное имя выбранного шрифта. Так как доступные шрифты могут отличаться от системы к системе, не предполагается, что выбранный шрифт всегда совпадает с запрошенным шрифтом. Например, если вы запрашиваете шрифт с именем Palatino, но такой шрифт недоступен в системе, карта шрифта заменит шрифт, имеющий аналогичные атрибуты, но другое имя. Всегда сообщайте имя выбранного шрифта пользователю.

Чтобы получить соответствующий шрифт в различных языковых версиях ОС, вызовите EnumFontFamiliesEx с требуемыми характеристиками шрифта в структуре LOGFONT, а затем получите соответствующее имя шрифта и создайте шрифт с помощью CreateFont или CreateFontIndirect.

Приложение сопоставления шрифтов для CreateFont,CreateFontIndirectи CreateFontIndirectEx распознает как английское, так и локализованное имя шрифта независимо от языкового стандарта.

В следующих ситуациях не поддерживается защита ClearType:

  • Текст, отрисованный на принтере.
  • Набор отображения для 256 цветов или меньше.
  • Текст, отрисованный клиенту сервера терминала.
  • Шрифт не является шрифтом TrueType или шрифтом OpenType с контурами TrueType. Например, следующие не поддерживают защиту ClearType: тип 1 шрифтов, шрифты Postscript OpenType без контуров 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 или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка wingdi.h (включая Windows.h)
библиотеки Gdi32.lib
DLL Gdi32.dll

См. также

CreateFontIndirect

CreateFontIndirectEx

DeleteObject

EnumFontFamilies

EnumFontFamiliesEx

EnumFonts

функции шрифта и текста

шрифтов и текста

LOGFONT

SelectObject