LOGFONTW 结构 (wingdi.h)

LOGFONT 结构定义字体的属性。

语法

typedef struct tagLOGFONTW {
  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;
  WCHAR lfFaceName[LF_FACESIZE];
} LOGFONTW, *PLOGFONTW, *NPLOGFONTW, *LPLOGFONTW;

成员

lfHeight

字体字符单元格或字符的高度(以逻辑单位为单位)。 字符高度值(也称为 em 高度)是字符单元格高度值减去内部前导值。 字体映射器按以下方式解释 lfHeight 中指定的值。

价值 意义
> 0 字体映射器将此值转换为设备单位,并将其与可用字体的单元格高度匹配。
0 字体映射器在搜索匹配项时使用默认高度值。
< 0 字体映射器将此值转换为设备单位,并将其绝对值与可用字体的字符高度匹配。
 

对于所有高度比较,字体映射器查找不超过所请求大小的最大字体。

首次使用字体时,会发生此映射。

对于MM_TEXT映射模式,可以使用以下公式为具有指定点大小的字体指定高度:


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

lfWidth

字体中字符的平均宽度(以逻辑单位为单位)。 如果 lfWidth 为零,则设备纵横比与可用字体的数字化纵横比匹配,以查找最接近的匹配,由差值的绝对值确定。

lfEscapement

转义向量与设备的 x 轴之间的角度(以十分之为单位)。 转义向量与文本行的基线并行。

当图形模式设置为GM_ADVANCED时,可以指定字符串的转义角度,而与字符串字符的方向角度无关。

当图形模式设置为GM_COMPATIBLE时,lfEscapement 同时指定转义和方向。 应将 lfEscapementlfOrientation 设置为相同的值。

lfOrientation

每个字符的底线与设备的 x 轴之间的角度(以十分之为单位)。

lfWeight

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

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
  • VIETNAMESE_CHARSET
Windows 的朝鲜语版本:
  • JOHAB_CHARSET
中东语言版本的 Windows:
  • ARABIC_CHARSET
  • HEBREW_CHARSET
Windows 的泰国语言版本:
  • THAI_CHARSET
OEM_CHARSET值指定依赖于操作系统的字符集。

DEFAULT_CHARSET设置为基于当前系统区域设置的值。 例如,当系统区域设置为英语(美国)时,系统区域设置设置为ANSI_CHARSET。

操作系统中可能存在具有其他字符集的字体。 如果应用程序使用具有未知字符集的字体,则不应尝试翻译或解释使用该字体呈现的字符串。

此参数在字体映射过程中非常重要。 若要确保创建字体时的结果一致,请不要指定OEM_CHARSET或DEFAULT_CHARSET。 如果在 lfFaceName 成员中指定字样名称,请确保 lfCharSet 值与 lfFaceName中指定的字样集匹配。

lfOutPrecision

输出精度。 输出精度定义输出必须与所请求字体的高度、宽度、字符方向、转义、间距和字体类型相匹配的方式。 它可以是以下值之一。

价值 意义
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 窗体中包含名为 Symbol 的字体,则指定OUT_TT_PRECIS强制字体映射器选择 TrueType 版本。 指定OUT_TT_ONLY_PRECIS强制字体映射器选择 TrueType 字体,即使它必须替换另一个名称的 TrueType 字体。

lfClipPrecision

剪辑精度。 剪辑精度定义如何剪辑部分超出剪辑区域的字符。 它可以是以下一个或多个值。

有关坐标系方向的详细信息,请参阅 nOrientation 参数的说明。

价值 意义
CLIP_CHARACTER_PRECIS 未使用。
CLIP_DEFAULT_PRECIS 指定默认剪辑行为。
CLIP_DFA_DISABLE Windows XP SP1: 关闭字体的字体关联。 请注意,此标志不能保证在 Windows Server 2003 之后对任何平台产生任何影响。
CLIP_EMBEDDED 必须指定此标志才能使用嵌入的只读字体。
CLIP_LH_ANGLES 使用此值时,所有字体的旋转取决于坐标系的方向是左手还是右手。如果未使用,设备字体始终逆时针旋转,但其他字体的旋转取决于坐标系的方向。
CLIP_MASK 未使用。
CLIP_DFA_OVERRIDE 关闭字体的字体关联。 这与CLIP_DFA_DISABLE相同,但在某些情况下可能会出现问题:建议使用的标志是CLIP_DFA_DISABLE。
CLIP_STROKE_PRECIS 字体映射器不使用,但在枚举光栅、矢量或 TrueType 字体时返回。 为了兼容,枚举字体时始终返回此值。
CLIP_TT_ALWAYS 未使用。

lfQuality

输出质量。 输出质量定义图形设备接口(GDI)必须尝试将逻辑字体属性与实际物理字体的逻辑字体属性匹配的方式。 它可以是以下值之一。

价值 意义
ANTIALIASED_QUALITY 如果字体支持字体且字体大小不小或太大,则字体始终反锯齿。
CLEARTYPE_QUALITY 如果已设置,将使用 ClearType 抗锯齿方法呈现文本(如果可能)。 有关详细信息,请参阅“备注”。
DEFAULT_QUALITY 字体的外观并不重要。
DRAFT_QUALITY 字体的外观比使用PROOF_QUALITY时要重要。 对于 GDI 光栅字体,启用缩放,这意味着有更多的字号可用,但质量可能较低。 如有必要,将合成粗体、斜体、下划线和删除线字体。
NONANTIALIASED_QUALITY 字体永远不会反锯齿。
PROOF_QUALITY 字体的字符质量比逻辑字体属性的完全匹配更重要。 对于 GDI 光栅字体,将禁用缩放,并且选择最接近大小的字体。 虽然使用PROOF_QUALITY时,所选字号可能无法精确映射,但字体质量较高,外观没有扭曲。 如有必要,将合成粗体、斜体、下划线和删除线字体。
 

如果未选择ANTIALIASED_QUALITY或NONANTIALIASED_QUALITY,则仅当用户在控制面板中选择平滑屏幕字体时,字体才会反锯齿。

lfPitchAndFamily

字体的音调和系列。 两个低序位指定字体的间距,可以是以下值之一。

  • DEFAULT_PITCH
  • FIXED_PITCH
  • VARIABLE_PITCH
成员的位 4 到 7 指定字体系列,可以是以下值之一。
  • FF_DECORATIVE
  • FF_DONTCARE
  • FF_MODERN
  • FF_ROMAN
  • FF_SCRIPT
  • FF_SWISS
可以使用按位 OR (|) 运算符将一个音调常量与一个系列常量联接,从而获取适当的值。

字体系列以一般方式描述字体的外观。 当确切的字样不可用时,它们用于指定字体。 字体系列的值如下所示。

价值 意义
FF_DECORATIVE 新颖的字体。 老英语就是一个例子。
FF_DONTCARE 使用默认字体。
FF_MODERN 具有常量笔划宽度的字体(单空格),带或不带衬线。 单空间字体通常为新式字体。 Pica、Elite 和 CourierNew 是示例。
FF_ROMAN 具有可变笔划宽度(成比例)和衬线的字体。 MS Serif 是一个示例。
FF_SCRIPT 设计为类似于手写的字体。 脚本和 Cursive 是示例。
FF_SWISS 具有可变笔划宽度(成比例)和无衬线的字体。 MS Sans Serif 是一个示例。

lfFaceName[LF_FACESIZE]

一个以 null 结尾的字符串,指定字体的字样名称。 此字符串的长度不得超过 32 TCHAR 值,包括终止 NULLEnumFontFamiliesEx 函数可用于枚举所有当前可用字体的字样名称。 如果 lfFaceName 为空字符串,GDI 将使用与其他指定属性匹配的第一个字体。

言论

以下情况不支持 ClearType 反锯齿:

  • 文本在打印机上呈现。
  • 为 256 种颜色或更少颜色设置的显示。
  • 文本呈现到终端服务器客户端。
  • 字体不是 TrueType 字体,也不是具有 TrueType 轮廓的 OpenType 字体。 例如,以下不支持 ClearType 抗锯齿:类型 1 字体、Postscript OpenType 字体(不含 TrueType 轮廓、位图字体、矢量字体和设备字体)。
  • 该字体已针对包含嵌入位图的任何字号调整嵌入位图。 例如,这通常发生在东亚字体中。

注意

wingdi.h 标头将 LOGFONT 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows 2000 Professional [桌面应用 |UWP 应用]
支持的最低服务器 Windows 2000 Server [桌面应用 |UWP 应用]
标头 wingdi.h (包括 Windows.h)

另请参阅

CreateFont

CreateFontIndirect

EnumFontFamiliesEx

字体和文本结构

字体和文本概述