Visual C++. Описание стандартных классов - LOGFONT

ОГЛАВЛЕНИЕ


LOGFONT

typedef struct tagLOGFONT { // lf
  LONG lfHeight;
  LONG lfWidth;
  LONG lfEscapement;
  LONG lfOrientation;
  LONG lfWeight;
  BYTE lfItalic;
  BYTE lfUnderline;
  BYTE lfStrikeOut;
  BYTE lfCharSet;
  BYTE lfOutPrecision;
  BYTE lfClipPrecision;
  BYTE lfQuality;
  BYTE lfPitchAndFamily;
  TCHAR lfFaceName[LF_FACESIZE];
} LOGFONT;

Переменные

  • lfHeight - определяет высоту ячейки шрифта или символа в логических единицах. Высота символа представляет собой высоту ячейки символа минус межстрочный интервал. Программа масштабирования шрифтов воспринимает возможные значения данной переменной следующим образом:
    > 0 - программа масштабирования шрифтов преобразует эту величину в единицы устройства и сопоставляет ее с высотой ячеек имеющихся шрифтов;
    0 - программа масштабирования шрифтов использует при поиске значение, установленное по умолчанию;
    < 0 - программа масштабирования шрифтов преобразует эту величину в единицы устройства и использует ее абсолютное значение для задания высоты символов. При проведении всех сравнений высоты программа масштабирования шрифтов ищет максимальный шрифт, размеры которого не превышают заданных величин. Преобразование производится при первом использовании шрифта. В режиме отображения MM_TEXT для определения высоты шрифта по его размеру в элементах изображения может быть использована следующая формула:
    lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
  • lfWidth - определяет среднюю ширину символов в логических единицах. Если данная переменная имеет нулевое значение, то коэффициент сжатия устройства сопоставляется с отношением ширины знака к его высоте для имеющихся шрифтов с целью нахождения ближайшего соответствия, определяемого по абсолютной величине разности.
  • lfEscapement - определяет угол наклона, выраженный в десятках градусов, между базовой линией строки текста и горизонтальной осью устройства. В Windows NT в графическом режиме GM_ADVANCED имеется возможность определять угол наклона базовой линии строки текста независимо от угла ориентации символов в строке. В Windows 95 и в графическом режиме GM_COMPATIBLE Windows NT переменная lfEscapement определяет одновременно угол наклона базовой линии строки текста и ориентацию символов. Поэтому переменные lfEscapement и lfOrientation должны иметь одно и то же значение.
  • lfOrientation - определяет угол наклона, выраженный в десятках градусов, между базовой линией каждого символа в строке текста и горизонтальной осью устройства.
  • lfWeight - определяет вес шрифта, значение которого находится в диапазоне от 0 до 1000. Например значение 400 соответствует обычному шрифту, а значение 700 - полужирному шрифту. Если данная переменная имеет нулевое значение, то используется значение веса шрифта, установленное по умолчанию. В таблице П2.7. приведены предопределенные значения веса шрифта:
    Таблица П2.7. Предопределенные значения веса шрифта Идентификатор Значение 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
    lfItalic - если эта величина имеет значение TRUE, то текст выводится курсивом.
  • lfUnderline - если эта величина имеет значение TRUE, то текст выводится с подчеркиванием.
  • lfStrikeOut - если эта величина имеет значение TRUE, то текст выводится с зачеркиванием.
  • lfCharSet - определяет используемый набор символов. Может иметь следующие значения: 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. В корейской версии Windows определено значение JOHAB_CHARSET. В ближневосточной версии Windows определены значения HEBREW_CHARSET и ARABIC_CHARSET. В таиландской версии Windows определено значение THAI_CHARSET. Набор символов OEM_CHARSET зависит от используемой версии Windows. Набор символов DEFAULT_CHARSET при задании имени и размера шрифта полностью определяет логический шрифт. Если задаваемое имя шрифта не существует, то вместо заданного может использоваться шрифт с любым набором символов. Поэтому необходимо осторожно подходить к использованию набора символов DEFAULT_CHARSET.
    В операционной системе могут существовать шрифты с другими наборами символов. Если приложение использует шрифт с неизвестным набором символов, оно не пытается преобразовать или интерпретировать строку, выведенную с использованием данного шрифта.
    Эта переменная используется при масштабировании символов. Для получения надежных результатов необходимо использовать стандартные наборы символов. При определении начертания шрифта в переменной lfFaceName убедитесь, что значение переменной lfCharSet соответствует набору символов, определенному для начертания, определяемого переменной lfFaceName.
  • lfOutPrecision - определяет точность представления символов. Под точностью представления символов понимается то, насколько точно высота, ширина, ориентация символа, тип шрифта, наклон и наклон базовой линии выводимого символа должны соответствовать заданным. Данная переменная может принимать одно из следующих значений:
    OUT_CHARACTER_PRECIS - не используется;
    OUT_DEFAULT_PRECIS - задает параметры масштабирования, используемые по умолчанию;
    OUT_DEVICE_PRECIS - сообщает процедуре масштабирования шрифтов о необходимости использования шрифта устройства, если в системе определены несколько шрифтов с одним и тем же именем;
    OUT_OUTLINE_PRECIS - сообщает процедуре масштабирования шрифтов о необходимости использования шрифтов TrueType и подобных им шрифтов. Это значение используется только в Windows NT;
    OUT_RASTER_PRECIS - сообщает процедуре масштабирования о необходимости использования растровых шрифтов, если в системе определены несколько шрифтов с одним и тем же именем;
    OUT_STRING_PRECIS - данная величина не используется процедурой масштабирования шрифтов, но она возвращается при нумерации растровых шрифтов;
    OUT_STROKE_PRECIS - в Windows NT данная величина не используется процедурой масштабирования шрифтов, но она возвращается при нумерации шрифтов TrueType и подобных им шрифтов, а также векторных шрифтов. В Windows 95 данная величина используется процедурой масштабирования шрифтов, и возвращается при нумерации шрифтов TrueType и векторных шрифтов;
    OUT_TT_ONLY_PRECIS - сообщает процедуре масштабирования шрифтов о необходимости использования только шрифтов TrueType. Если в системе не определены шрифты TrueType, процедура масштабирования шрифтов использует параметры, используемые по умолчанию;
    OUT_TT_PRECIS - сообщает процедуре масштабирования шрифтов о необходимости использования шрифтов TrueType, если в системе определены несколько шрифтов с одним и тем же именем. Приложение использует значения OUT_DEVICE_PRECIS, OUT_RASTER_PRECIS и OUT_TT_PRECIS для задания режима, в котором процедура масштабирования шрифтов выбирает шрифт при наличии в операционной системе нескольких шрифтов с одним и тем же именем. Например, если в операционной системе определены растровый и TrueType шрифты с именем Symbol, присваивание данной переменной значения OUT_TT_PRECIS заставляет процедуру масштабирования шрифтов выбрать версию TrueType. Присваивание значения OUT_TT_ONLY_PRECIS заставляет процедуру масштабирования шрифтов выбрать версию TrueType даже в том случае, когда ей придется для этого выбрать шрифт TrueType с другим именем.
  • lfClipPrecision - определяет точность процедуры отсечки. Под точностью процедуры отсечки понимают то, как поступать с символами, частично выходящими за область отсечки. Данная переменная может принимать одно из следующих значений:
    CLIP_DEFAULT_PRECIS - требует использовать процедуру отсечки, определенную по умолчанию;
    CLIP_CHARACTER_PRECIS - не используется;
    CLIP_STROKE_PRECIS - не используется процедурой масштабирования шрифтов, но возвращается при нумерации растровых, векторных или TrueType шрифтов. В Windows NT для совместимости эта величина всегда возвращается при нумерации шрифтов;
    CLIP_MASK - не используется;
    CLIP_EMBEDDED - этот флаг используется при работе с внедренными шрифтами, имеющими атрибут "только для чтения". CLIP_LH_ANGLES - определяет вращение всех шрифтов, происходящее по часовой или против часовой стрелки, в зависимости от направления осей системы координат. Если данная переменная не используется, то все шрифты устройств вращаются против часовой стрелки, но вращение всех других шрифтов будет зависеть от направления осей системы координат. Дополнительную информацию о направлении осей системы координат можно получить из описания переменной nOrientation;
    CLIP_TT_ALWAYS - не используется.
  • lfQuality - определяет качество выводимых символов. Качество выводимых символов определяет, с какой точностью интерфейс графических устройств (GDI) должен добиваться соответствия параметров логического шрифта параметрам используемого физического шрифта. Данная переменная может принимать одно из следующих значений:
    DEFAULT_QUALITY - качество выводимого шрифта не имеет значения;
    DRAFT_QUALITY - качество шрифта может быть хуже, чем при использовании значения PROOF_QUALITY. При использовании растровых шрифтов возможно использование масштабирования, что расширяет диапазон размеров шрифтов за счет снижения их качества. При необходимости синтезируются жирные, курсивные, подчеркнутые и зачеркнутые шрифты;
    PROOF_QUALITY - при выводе символов шрифта требуется обеспечить совпадение дополнительных параметров, кроме указанных в атрибутах логического шрифта. Для растровых шрифтов нельзя использовать операцию масштабирования и необходимо выбрать ближайший по размерам шрифт. Хотя при выборе размера шрифта может быть использован шрифт другого размера, значение PROOF_QUALITY обеспечивает более высокое качество отображения символов и отсутствие искажений при их выводе. При необходимости синтезируются жирные, курсивные, подчеркнутые и зачеркнутые шрифты.
  • lfPitchAndFamily - определяет, будет ли шрифт иметь фиксированную или переменную ширину литер, а также семейство, к которому принадлежит данный шрифт. Два наименее значимых бита определяют, будет ли шрифт иметь фиксированную или переменную ширину литер, и могут принимать одно из следующих значений: DEFAULT_PITCH, FIXED_PITCH и VARIABLE_PITCH. Биты с 4 по 7 данной переменной определяют семейство, к которому принадлежит данный шрифт, и могут принимать одно из следующих значений: FF_DECORATIVE, FF_DONTCARE, FF_MODERN, FF_ROMAN, FF_SCRIPT и FF_SWISS. Полное значение данной переменной получается с использованием операции логического ИЛИ между константой, определяющей ширину литер, и константой, определяющей семейство.
    Семейство шрифтов определяет их общее начертание. Оно используется для определения шрифтов при отсутствии более точного определения их начертания. Используемые в данном случае семейства шрифтов имеют следующие отличительные особенности:
    FF_DECORATIVE - нестандартный шрифт. Например Old English;
    FF_DONTCARE - начертание шрифта не имеет значение или неизвестно;
    FF_MODERN - шрифт с постоянной шириной штриха, имеющий или не имеющий засечек. К этим шрифтам относятся современные шрифты, такие как Pica, Elite и CourierNew;
    FF_ROMAN - шрифт с переменной шириной штриха (пропорциональный) имеющий засечки. Примером данного шрифта является Serif;
    FF_SCRIPT - шрифт подобный рукописному. Примером данного шрифта являются Script и Cursive;
    FF_SWISS - шрифт с переменной шириной штриха (пропорциональный) не имеющий засечек. Примером данного шрифта является Sans Serif.
  • lfFaceName - текстовая строка, завершающаяся нулем, содержащая имя шрифта. Длина данной строки не должна превышать 32 символа, включая завершающий ее нулевой символ. Для нумерации всех имен доступных шрифтов может использоваться функция EnumFontFamilies. Если строка lfFaceName пуста, GDI использует первый шрифт, соответствующий всем другим заданным атрибутам.

Описание

Объект структуры LOGFONT используется для задания атрибутов шрифта.