原文链接 -> 传送门
LOGFONT 结构:
LOGFONT 结构定义了字体的属性。
结构原型:
typedef struct tagLOGFONT {
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, *PLOGFONT;
成员解析:
|
参数
|
含义
|
|
nHeight
|
1. 字体的字符单元或字符的逻辑单位高度。字符的高度值(也被称为 em 高度)是指字符单元高度值减去内部标头值。字体映射器以如下方式解释 nHeight 指定的值。
|
值
|
含义
|
|
> 0
|
字体映射器将这个值转换为设备单位,并和可用的字体的单元高度相匹配
|
|
0
|
字体映射器在选择匹配时用一个默认的高度值
|
|
< 0
|
字体映射器将这个值转换为设备单位,并将它的绝对值和可用的字体的字符高度相匹配
|
2. 比较所有的高度,字体映射器选择不超过要求大小的最大字体
3. 当字体第一次被使用时,出现此映射
4. 对于 MM_TEXT 映射模式,你可以用下面的公式为一种指定了点大小的字体确定高度:
1. nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
复制代码
|
|
nWidth
|
1. 所请求字体字符的逻辑单位的平均宽度
2. 如果此值为 0,那么字体映射器选择一个最匹配的值(最匹配的值是由比较当前设备长宽比与可使用字体的数字化长宽比之差的绝对值而确定的)
|
|
nEscapement
|
1. 偏移向量和设备 x 轴之间以十分之一度为单位的角度(偏移向量平行于正文行的基线)
2. 当图形模式设置为 GM_ADVANCED,可以不依赖字符串字符的方位角而指定字符串的移位角度
3. 当图形模式设置为 GM_COMPATIBLE 时,nEscapement 同时指定偏移角和方位角。你可以设置 nEscapement 和 nOrientation 为相同的值
|
|
nOrientation
|
每个字符的基线与设备 x 轴之间以十分之一度为单位的角度
|
|
fnWeight
|
1. 字体的权值(在 0 ~ 1000 之间)。例如 400 表示标准,700 表示粗体。如果此值为 0,则使用默认的权值
2. 为了便捷,系统定义了下面的值:
|
权值
|
值
|
|
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
|
|
|
fdwItalic
|
如果设置为 TRUE,则字体设置为斜体
|
|
fdwUnderline
|
如果设置为 TRUE,则字体增加下划线
|
|
fdwStrikeOut
|
如果设置为 TRUE,则字体增加删除线
|
|
fdwCharSet
|
1. 字符集,预定义了下列值:
· 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
2. 韩语版本的 Windows:
· JOHAB_CHARSET
3. 中东语言版本的 Windows:
· ARABIC_CHARSE
· HEBREW_CHARSET
4. 泰国语言版本的 Windows:
· THAI_CHARSET
5. OEM_CHARSET 值指定操作系统所依赖的字符集
6. 根据当前系统的区域设置 DEFAULT_CHARSET 的值。例如,当系统区域设置为 English(United States) 时,它被设置为 ANSI_CHARSET
7. 在操作系统中可能存在其他字符集的字体。如果应用程序使用未知字符集的字体,它不应该试图翻译或解释这个字体所渲染的字符串
8. 当创建字体时,为保证结果一致,不要设置 OEM_CHARSET 或 DEFAULT_CHARSET。如果你在 lpszFace 参数中指定了字体名称,需要确保 fdwCharSet 值与 lpszFace 中指定字体的字符集相匹配
|
|
fdwOutputPrecision
|
1. 输出精度。输出精度定义了输出必须在多大程度上与所请求的字体的高度,宽度,字符方向,旋转角度,间距和字体类型相匹配。它可以取下列值之一:
|
值
|
含义
|
|
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 字体
|
2. 当操作系统含有多种与指定名字同名的字体时,应用程序可以使用 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 字体换一个名字
|
|
fdwClipPrecision
|
裁剪精度。裁剪精度定义如何裁剪部分超出裁剪区的字符,它可取一个或多个下列值:
|
值
|
含义
|
|
CLIP_CHARACTER_PRECIS
|
未使用
|
|
CLIP_DEFAULT_PRECIS
|
指定默认裁剪行为
|
|
CLIP_DFA_DISABLE
|
Windows XP SP1:关闭字体关联。注意这个标志并不保证会对 Windows Server 2003 以后的任何平台产生影响
|
|
CLIP_EMBEDDED
|
您必须指定此标志来使用嵌入式只读的字体
|
|
CLIP_LH_ANGLES
|
1. 当此值被使用时,所有字体的旋转取决于坐标系的方向是左旋还是右旋
2.如果未使用此值,设备字体总是逆时针方向旋转,但其他字体的旋转依赖于坐标系统的定向
3. 要获取更多关于坐标系统定向的信息,请参见 nOrientation 参数的描述
|
|
CLIP_MASK
|
未使用
|
|
CLIP_DFA_OVERRIDE
|
关闭字体关联。与 CLIP_DFA_DISABLE 相同,但是在一些情况下,可能会出现问题;建议使用 CLIP_DFA_DISABLE 标识
|
|
CLIP_STROKE_PRECIS
|
字体映射器不使用该值,当时但光栅,向量,或 TrueType 字体被枚举时,会返回该值。出于兼容性考虑,当枚举字体时,总是返回此值
|
|
CLIP_TT_ALWAYS
|
未使用
|
|
|
fdwQuality
|
1. 输出质量。输出质量定义 GDI 如何仔细地将逻辑字体属性与实际物理字体属性相匹配。它可取下列值之一:
|
值
|
含义
|
|
ANTIALIASED_QUALITY
|
如果字体支持并且字体的大小太小或太大,则字体是反锯齿,或平滑的
|
|
CLEARTYPE_QUALITY
|
如果设置,文本将使用 ClearType 反锯齿的方法被渲染(如果可能)
|
|
DEFAULT_QUALITY
|
字体的外观不重要
|
|
DRAFT_QUALITY
|
字体外观的重要性次于当使用 PROOF_QUALITY 时。对于 GDI 光栅字体,缩放是允许的,这意味着多种字体大小可以使用,但质量可能会低一些,如果有必要,粗体,斜体,下划线,带删除线的字体可以结合起来使用
|
|
NONANTIALIASED_QUALITY
|
字体永远不是抗锯齿的,即字体没有做平滑处理
|
|
PROOF_QUALITY
|
字符质量比精确匹配逻辑字体字体属性更重要。对于 GDI 扫描字体,缩放是允许的,并选择最接近的大小。尽管当使用 PROOF_QUALITY 时,选择的字体大小并可能没有被正确映射,但字体的质量很高,并没有外观上的变形。如果有必要,粗体,斜体,下划线,带删除线的字体可以结合起来使用
|
2. 如果输出质量为 DEFAULT_QUALITY, DRAFT_QUALITY 或 PROOF_QUALITY,那么如果 SPI_GETFONTSMOOTHING 系统参数是 TRUE,字体是反锯齿的。用户可以从控制面板控制这个系统参数。(控制面板的精确位置取决于 Windows 的版本,但是单词的大意是“屏幕字体的平滑边缘”)
|
|
fdwPitchAndFamily
|
1. 字体间距和字体族。低两位指定字体的字符间距,并且它可取下列值之一:
· DEFAULT_PITCH
· FIXED_PITCH
· VARIABLE_PITCH
2. 高四位指定字体族,并且它可取下列值之一:
|
值
|
含义
|
|
FF_DECORATIVE
|
新颖字体,例如老式英语
|
|
FF_DONTCARE
|
使用默认字体
|
|
FF_MODERN
|
笔划宽度固定,有或者无衬线的字体。例如 Pica,Elite 和 Courier New
|
|
FF_ROMAN
|
笔划宽度变动,有衬线的字体。例如 MS Serif
|
|
FF_SCRIPT
|
设计成看上去像手写体的字体。例如 Script 和 Cursive
|
|
FF_SWISS
|
笔划宽度变动,无斜线的字体。例如 MS Sans Serif
|
3. 应用程序可以用布尔 OR 操作符将字符间距和字体族组合起来给 fdwPitchAndFamily 参数指定一个值
4. 字体族描述一种字体的普通外观。当请求的精确字体不可使用时,可用它们来指定字体
|
|
lpszFace
|
1. 以空结束的字符串的指针,并且这个字符串指定字体的字体名称。该字符串的长度不能超过 32 个字符,包括结尾空字符。EnumFontFamilies 函数可用来枚举所有当前可用字体的字体名称。更多信息,请参见备注部分
2. 如果 lpszFace 为 NULL 或是一个空字符串,GDI 使用能匹配其它属性的第一个字体
|
返回值:
1. 如果函数调用成功,返回值是逻辑字体的句柄;
2 .如果函数调用失败,返回值为 NULL。
备注:
下列情况下不支持 ClearType 抗锯齿:
· 打印机上渲染的文本。
· 256 色或更少颜色的显示设置。
· 向终端服务器客户端渲染的文本。
· 字体不是 TrueType 或 具有 TrueType 轮廓的 OpenType 字体。例如,下列的不支持 ClearType 抗锯齿:1号字体,不具有 TrueType 轮廓的 OpenType 字体,位图字体,向量字体,和设备字体。
· 字体已经调整为嵌入位图,仅包含嵌入的位图的字体大小。例如,这在东亚字体中经常出现。
需求:
|
Minimum supported client
|
Windows 2000 专业版 [仅桌面应用程序]
|
|
Minimum supported server
|
Windows 2000 服务器版 [仅桌面应用程序]
|
|
Header
|
Winuser.h (包含于 Windows.h)
|
|
Unicode and ANSI names
|
LOGFONTW (Unicode) 和 LOGFONTA (ANSI)
|