特殊说明:版权归个人所有,请勿转载,谢谢合作。
字体,又称书体,是指文字的风格式样,是一套具有一定的尺寸和外观的字符类型集合。在实际应用中,系统所提供的字体往往不能满足程序上的需求,可以使用CreateFont函数或CreateFontIndirect函数来创建自定义的字体风格。CreateFont函数原型如下:
HFONT CreateFont( int nHeight, // logical height of font int nWidth, // logical average character width int nEscapement, // angle of escapement int nOrientation, // base-line orientation angle int fnWeight, // font weight DWORD fdwItalic, // italic attribute flag DWORD fdwUnderline, // underline attribute flag DWORD fdwStrikeOut, // strikeout attribute flag DWORD fdwCharSet, // character set identifier DWORD fdwOutputPrecision, // output precision DWORD fdwClipPrecision, // clipping precision DWORD fdwQuality, // output quality DWORD fdwPitchAndFamily, // pitch and family LPCTSTR lpszFace // pointer to typeface name string );
参数nWidth,字体的宽度,如果需要Windows计算合适的宽度,可将这个字段置为0。参数nHeight,字体的高度,取0则采用系统默认值,使用逻辑单位。
参数nEscapement,每行文字相对于页底的角度,即每行字体显示的角度,以十分之一度为单位。移位向量平行于正文行的基线。字体正常打印时,这个字段的值为0;值为90时,垂直向上打印;值为180时,字体头朝下向后打印;值为270时,垂直向下打印。
参数nOrientation,字体的角度,每个文字相对于页底的角度,即每个字显示的角度,以十分之一度为单位。
参数fnWeight,字体的磅数,在Windows中,字体磅数这个术语用来指代字体的粗细程度。fnWeight的范围为0到1000,正常情况下的字体为400,粗体为700。如果fnWeight为0,则使用默认的字体值。
参数fdwItalic,是否为斜体字。如果设置为TRUE,则字体设置为斜体。
参数fdwUnderline,是否为带下划线的字体。如果设置为TRUE,则字体增加下划线。
参数fdwStrikeOut,是否为带删除线的字体。如果设置为TRUE,则字体增加删除线。
参数fdwCharSet,字体使用的字符集,指定值有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。其中OEM字符集是与操作系统相关的。
参数fdwOutputPrecision,指定输出精度,要求的字体高度、宽度、字符定位、移位、字符间距和字符类型的匹配程序,它可取表6.2值之一:
- 表6.2 fdwOutputPrecision参数值
值 | 含义 |
OUT_CHARACTER_PRECIS | 未用 |
OUT_DEFAULT_PRECIS | 指定缺省的字体行为 |
OUT_DEVICE_PRECIS | 指示字体映射器选择一种设备字体时,该系统包含多个名称相同的字体 |
OUT_OUTLINE_PRCIS | 在Windows NT中此值指示字体映射器从TrueType和其他基于边框的字体中选择 |
OUT_RASTER_PRECIS | 指示字体映射器选择一种光栅字体时,该系统包含多个名称相同的字体 |
OUT_STRING_PRECIS | 此值没有被字全映射器使用,但是当扫描字体被列举时作为返回值 |
OUT_STROKE_PRECIS | 在Windows NT中此值没有被字体映射器使用,但是当TrueType字体、其他基于边框的字体和向量字体被列举时,作为返回值 |
OUT_TT_ONLY_PRECIS | 指示字体映射器仅从TrueType字体中选择,如果系统中没有安装TrueType字体,则字体映射返回缺省状态 |
OUT_TT_PRECIS | 指示字体映射器在当系统里有多种同名的字体时选择一种TrueType字体 |
参数fdwClipPrecision,指定裁剪精度,裁剪精度定义如何裁剪部分超出裁剪区的字符,它可取表6.3中一个或多个值。
- 表6.3 fdwClipPrecision参数值
值 | 含义 |
CLIP_DEFAULT_PRECIS | 指定缺省裁剪状态 |
CLIP_CHARACTER_PRECIS | 未用 |
CLIP_STROKE_PRECIS | 未被字体映射器使用,但是当光栅字体、向量字体或TrueType字体被列举时作为返回值。在Windows环境下,为保证兼容性,当列举字体时这个值总被返回 |
CLIP_MASK | 未用 |
CLIP_EMBEDDED | 要使用嵌入式只读字体必须使用此标志 |
CLIP_LH_ANGLES | 当此值被使用时,所有字体的旋转依赖于坐标系统的定位是朝左的还是朝右的。如果未使用此值,设备字体总是逆时针方向旋转,但其他字体的旋转依赖于坐标系统的定向。要得到更多关于坐标系统定向的信息,参见参数orientation |
CLIP_TT_ALWAYS | 未用 |
参数fdwQuality,定义输出质量。输出质量定义了图形设备接口在匹配逻辑字体属性到实际的物理字体的所使用的方式,它可取表6.4中值之一。
- 表6.4 fdwQuality参数值
值 | 含义 |
DEFAULT_QUALITY | 默认质量,字体的外观不重要 |
DRAFT_QUALITY | 草稿质量,字体外观的重要性次于使用PROOF_QUALITY时,对GDI光栅字体,缩放比例是活动的,这意味着多种字体大小可供选择,但质量可能不高,如果有必要,粗体、斜体、下划线、strikeout字体可被综合起来使用 |
PROOF_QUALITY | 正稿质量,字符质量比精确匹配逻辑字体字体属性更重要。对GDI扫描字体,缩放比例是活动的,并选择最接近的大小。尽管当使用PROOF_QUALITY时,选择字 体大小并不完全匹配,但字体的质量很高,并没有外观上的变形。如果有必要,粗体、斜体、下划线、strikeout字体可被综合起来使用 |
参数fdwPitchAndFamily,不存在能够完全满足要求的字体时,帮助和指导Windows选择其他代用字体。一般赋值常量FF_ROMAN。
参数lpszFace,所要使用的字体的名称。
CreateFontIndirect函数功能与CreateFont函数相同,不一样的是CreateFontIndirect函数参数列表是LOGFONT类型的指针。
HFONT CreateFontIndirect( CONST LOGFONT *lplf // pointer to logical font structure );
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;
参数列表与CreateFont函数参数列表的含义相同,这里就不一一介绍了。