LOGFONTA 结构 (wingdi.h)
LOGFONT 结构定义字体的属性。
语法
typedef struct tagLOGFONTA {
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;
CHAR lfFaceName[LF_FACESIZE];
} LOGFONTA, *PLOGFONTA, *NPLOGFONTA, *LPLOGFONTA;
成员
lfHeight
字体的字符单元格或字符的高度(以逻辑单位为单位)。 字符高度值 (也称为 em height) 是字符单元格高度值减去内部前导值。 字体映射器按以下方式解释 lfHeight 中指定的值。
值 | 含义 |
---|---|
> 0 | 字体映射器将此值转换为设备单位,并将其与可用字体的单元格高度匹配。 |
0 | 字体映射器在搜索匹配项时使用默认高度值。 |
< 0 | 字体映射器将此值转换为设备单位,并将其绝对值与可用字体的字符高度匹配。 |
对于所有高度比较,字体映射器会查找不超过请求大小的最大字体。
首次使用该字体时,会发生此映射。
对于MM_TEXT映射模式,可以使用以下公式指定具有指定点大小的字体的高度:
lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
lfWidth
字体中字符的平均宽度(以逻辑单位为单位)。 如果 lfWidth 为零,则设备的纵横比将与可用字体的数字化纵横比进行匹配,以查找由差值的绝对值确定的最接近匹配项。
lfEscapement
转义向量与设备的 x 轴之间的角度(以十分之一度为单位)。 转义向量与文本行的基线平行。
当图形模式设置为“GM_ADVANCED”时,可以独立于字符串字符的方向角度指定字符串的转义角度。
当图形模式设置为GM_COMPATIBLE时, lfEscapement 同时指定转义和方向。 应将 lfEscapement 和 lfOrientation 设置为相同的值。
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
- JOHAB_CHARSET
- ARABIC_CHARSET
- HEBREW_CHARSET
- THAI_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
- FF_DECORATIVE
- FF_DONTCARE
- FF_MODERN
- FF_ROMAN
- FF_SCRIPT
- FF_SWISS
字体系列以一般方式描述字体的外观。 它们用于在所需的确切字样不可用时指定字体。 字体系列的值如下所示。
值 | 含义 |
---|---|
FF_DECORATIVE | 新奇字体。 例如 Old English。 |
FF_DONTCARE | 使用默认字体。 |
FF_MODERN | 具有固定笔划宽度的字体 (带衬线或无衬线) 的空白字体。 Monospace 字体通常是新式字体。 例如,Pica、Elite 和 CourierNew。 |
FF_ROMAN | 笔划宽度可变的字体 (比例) 和衬线。 例如 MS Serif。 |
FF_SCRIPT | 设计为类似于手写的字体。 例如 Script 和 Cursive。 |
FF_SWISS | 笔划宽度可变的字体 (成比例) 且不带衬线。 例如 MS Sans Serif。 |
lfFaceName[LF_FACESIZE]
以 NULL 结尾的字符串指定字体的字体名称。 此字符串的长度不能超过 32 个 TCHAR 值,包括终止 NULL。 EnumFontFamiliesEx 函数可用于枚举所有当前可用字体的字体名称。 如果 lfFaceName 是空字符串,则 GDI 使用与其他指定属性匹配的第一个字体。
注解
以下情况不支持 ClearType 抗锯齿:
- 文本在打印机上呈现。
- 显示设置为 256 种或更少颜色。
- 文本呈现到终端服务器客户端。
- 该字体不是 TrueType 字体或具有 TrueType 轮廓的 OpenType 字体。 例如,以下不支持 ClearType 抗锯齿:键入 1 字体、不带 TrueType 轮廓的 Postscript OpenType 字体、位图字体、矢量字体和设备字体。
- 该字体已针对包含嵌入位图的任何字号调整嵌入位图。 例如,这通常发生在东亚字体中。
注意
wingdi.h 标头将 LOGFONT 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
最低受支持的客户端 | Windows 2000 专业版 [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows 2000 Server [桌面应用 |UWP 应用] |
标头 | wingdi.h (包括 Windows.h) |