代码中使用CreateFont函数来创建字体,它的原型是:
HFONT CreateFont(
int cHeight, //字体的逻辑高度
int cWidth, //字体的逻辑宽度
int cEscapement, //指定移位向量相对X轴的偏转角度
int cOrientation, //指定字符基线相对X轴的偏转角度
int cWeight, //设置字体粗细程度
DWORD bItalic, //是否启用斜体
DWORD bUnderline, //是否启用下划线
DWORD bStrikeOut, //是否启用删除线
DWORD iCharSet, //指定字符集
DWORD iOutPrecision, //输出精度
DWORD iClipPrecision, //剪裁精度
DWORD iQuality, //输出质量
DWORD iPitchAndFamily, //字体间距和字体族
LPCSTR pszFaceName //字体名
);
1) nHeight:指定字体的字符单元或字符的逻辑单位高度,字符的高度值(也被称为em高度)是指字符单元高度值减去内部标头值。
字体映射器以例如以下方式解释nHeight指定的值,各值含义为:
>0:字体映射器转换这个值以设备单位,并和已有字体的单元高度相匹配。
=0:字体映射器转换在选择匹配时用一个缺省的高度值。
<0:字体映射器转换这个值到设备单位。并将它的绝对值和已有字体的字符高度相匹配。
参数 cWidth 和 cHeight 通常取负值,且高度为宽度的2倍,如 -18 和 -9,即可指定 13.5 |(H+W)/2| 磅的字体。
2) nEscapement:指定移位向量和设备X轴之间的一个角度,以十分之中的一个度为单位。移位向量平行于正文行的基线。
3) nOrientation:指定每一个字符的基线和设备X轴之间的角度。
4) cWeight:在0到1000之间指定字体的权值,如400表示标准体,700表示黑(粗)体,假设此值为0,则使用缺省的权值。
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。
5) bItalic:设置为1则指定斜体。
6) bUnderline:设置为1则指定加下划线的字体。
7) bStrikeOut:设置为1则指定删除线的字体。
8) iCharSet:指定字符集。
下列值是提前定义的:
#define ANSI_CHARSET 0
#define DEFAULT_CHARSET 1
#define SYMBOL_CHARSET 2
#define SHIFTJIS_CHARSET 128
#define HANGEUL_CHARSET 129
#define HANGUL_CHARSET 129
#define GB2312_CHARSET 134
#define CHINESEBIG5_CHARSET 136
#define OEM_CHARSET 255
#if(WINVER >= 0x0400)
#define JOHAB_CHARSET 130
#define HEBREW_CHARSET 177
#define ARABIC_CHARSET 178
#define GREEK_CHARSET 161
#define TURKISH_CHARSET 162
#define VIETNAMESE_CHARSET 163
#define THAI_CHARSET 222
#define EASTEUROPE_CHARSET 238
#define RUSSIAN_CHARSET 204
#define MAC_CHARSET 77
#define BALTIC_CHARSET 186
OEM_CHARSET指定的字符集与操作系统有关
9) iOutPrecision:指定输出精度,输出精度义输出与要求的字体高度、宽度、字符定位、移位、字符间距和字符类型的匹配程序
它可取下列值之中的一个:
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字体、其它基于边框的字体和向量字体被列举时,作为返回值。
Windows 95:此值没有被字体映射器使用。可是当TrueType字体或向量字体被列举时。作为返回值。
OUT_TT_ONLY_PRECIS:指示字体映射器仅从TrueType字体中选择,假设系统中没有安装TrueType字体,则字体映射返回缺省状态。、
OUT_TT_PRECIS:指示字体映射器在当系统里有多种同名的字体时选择一种TrueType字体。
当操作系统含有多种与指定名字同名的字体时。应用程序能够使用OUT_DEVICE_PRECIS,OUT_RASTER_PRECIS和OUT_TT_PRECIS值来控制字体映射器怎样选择一种字体,比如,假设操作系统含有名字Symbol的光栅和TrueType两种字体,指定OUT_TT_PRECIS使字体映射器选择TrueType方式。指定OUT_TT_ONLY_PRECIS使字体映射器选择一种TrueType字体。虽然这会给TrueType字体换一个名字。
#define OUT_DEFAULT_PRECIS 0
#define OUT_STRING_PRECIS 1
#define OUT_CHARACTER_PRECIS 2
#define OUT_STROKE_PRECIS 3
#define OUT_TT_PRECIS 4
#define OUT_DEVICE_PRECIS 5
#define OUT_RASTER_PRECIS 6
#define OUT_TT_ONLY_PRECIS 7
#define OUT_OUTLINE_PRECIS 8
#define OUT_SCREEN_OUTLINE_PRECIS 9
#define OUT_PS_ONLY_PRECIS 10
10) iClipPrecision:指定裁剪精度。裁剪精度定义怎样裁剪部分超出裁剪区的字符
它可取一个或多个下列值:
CLIP_DEFAULT_PRECIS:指定缺省裁剪状态。
CLIP_CHARACTER_PRECIS:未用。
CLIP_STROKE_PRECIS:未被字体映射器使用,可是当光栅字体、向量字体或TrueType字体被列举时作为返回值。
在Windows环境下。为保证兼容性。当列举字体时这个值总被返回。
CLIP_MASK:未用。CLIP_EMBEDDED:要使用嵌入式仅仅读字体必须使用此标志。
CLIP_LH_ANGLES:当此值被使用时,全部字体的旋转依赖于坐标系统的定位是朝左的还是朝右的。
假设未使用此值,设备字体总是逆时针方向旋转,但其它字体的旋转依赖于坐标系统的定向。要得到很多其它关于坐标系统定向的信息,參见參数orientation。
CLIP_TT_ALWAYS:未用。
#define CLIP_DEFAULT_PRECIS 0
#define CLIP_CHARACTER_PRECIS 1
#define CLIP_STROKE_PRECIS 2
#define CLIP_MASK 0xf
#define CLIP_LH_ANGLES (1<<4)
#define CLIP_TT_ALWAYS (2<<4)
11) iQuality:指向输出质量。输出质量定义GDI怎样细致地将逻辑字体属性与实际物理字体属性相匹配。
它可取下列值之中的一个:
DEFAULT_QUALITY:字体的外观不重要。
DRAFT_QUALITY:字体外观的重要性次于使用PROOF_QUALITY时,对GDI光栅字体,缩放比例是活动的,这意味着多种字体大小可供选择。但质量可能不高。假设有必要,粗体、斜体、下划线、strikeout字体可被综合起来使用。
PROOF_QUALITY:字符质量比精确匹配逻辑字体字体属性更重要。对GDI扫描字体,缩放比例是活动的,并选择最接近的大小。虽然当使用PROOF_QUALITY时。选择字体大小并不完全匹配,但字体的质量非常高。并没有外观上的变形。假设有必要,粗体、斜体、下划线、strikeout字体可被综合起来使用。
#define DEFAULT_QUALITY 0
#define DRAFT_QUALITY 1
#define PROOF_QUALITY 2
12) iPitchAndFamily:指定字体间距和字体族。低端二位指定字体的字符间距,它可取下列值之中的一个:
DEFAULT_PITCH: 0
FIXED_PITCH: 1
VARIABLE_PITCH: 2
高端四位指定字体族,可取下列值之中的一个:
FF_DECORATIVE:新鲜的字体。如老式英语(Old English)。
FF_DONTCARE:不关心或不知道。
FF_MDERN:笔划宽度固定的字体,有或者无衬线。
如Pica、Elite和Courier New。
FF_ROMAN:笔划宽度变动的字体,有衬线。如MS Serif。
FF_SCRIPT:设计成看上去象手写体的字体。
如Script和Cursive。
FF_SWISS:笔划宽度变动的字体。无斜线。如MS Sans Serif。
应用程序能够用运算符OR将字符间距和字体族组合起来给fdwPitchAndFamily赋值。
字体族描写叙述一种字体的普通外观,当全部的精确字样都不能使用时,可用它们来指定字体。
#define FF_DONTCARE (0<<4) /* Don't care or don't know. */
#define FF_ROMAN (1<<4) /* Variable stroke width, serifed. */
/* Times Roman, Century Schoolbook, etc. */
#define FF_SWISS (2<<4) /* Variable stroke width, sans-serifed. */
/* Helvetica, Swiss, etc. */
#define FF_MODERN (3<<4) /* Constant stroke width, serifed or sans-serifed. */
/* Pica, Elite, Courier, etc. */
#define FF_SCRIPT (4<<4) /* Cursive, etc. */
#define FF_DECORATIVE (5<<4) /* Old English, etc. */
13) pszFaceName:指向指定字体的字样名的、以/0结束的字符串指针,字符串的长度不能超过32个字符(包含字符/0),函数EnumFontFamilies可用来列举全部当前可用字体的字样名。
假设pszFaceName为NULL或指向一个空串。GDI使用能匹配其它属性的第一种字体。
HFONT CreateFont(
int cHeight, //字体的逻辑高度
int cWidth, //字体的逻辑宽度
int cEscapement, //指定移位向量相对X轴的偏转角度
int cOrientation, //指定字符基线相对X轴的偏转角度
int cWeight, //设置字体粗细程度
DWORD bItalic, //是否启用斜体
DWORD bUnderline, //是否启用下划线
DWORD bStrikeOut, //是否启用删除线
DWORD iCharSet, //指定字符集
DWORD iOutPrecision, //输出精度
DWORD iClipPrecision, //剪裁精度
DWORD iQuality, //输出质量
DWORD iPitchAndFamily, //字体间距和字体族
LPCSTR pszFaceName //字体名
);
1) nHeight:指定字体的字符单元或字符的逻辑单位高度,字符的高度值(也被称为em高度)是指字符单元高度值减去内部标头值。
字体映射器以例如以下方式解释nHeight指定的值,各值含义为:
>0:字体映射器转换这个值以设备单位,并和已有字体的单元高度相匹配。
=0:字体映射器转换在选择匹配时用一个缺省的高度值。
<0:字体映射器转换这个值到设备单位。并将它的绝对值和已有字体的字符高度相匹配。
参数 cWidth 和 cHeight 通常取负值,且高度为宽度的2倍,如 -18 和 -9,即可指定 13.5 |(H+W)/2| 磅的字体。
2) nEscapement:指定移位向量和设备X轴之间的一个角度,以十分之中的一个度为单位。移位向量平行于正文行的基线。
3) nOrientation:指定每一个字符的基线和设备X轴之间的角度。
4) cWeight:在0到1000之间指定字体的权值,如400表示标准体,700表示黑(粗)体,假设此值为0,则使用缺省的权值。
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。
5) bItalic:设置为1则指定斜体。
6) bUnderline:设置为1则指定加下划线的字体。
7) bStrikeOut:设置为1则指定删除线的字体。
8) iCharSet:指定字符集。
下列值是提前定义的:
#define ANSI_CHARSET 0
#define DEFAULT_CHARSET 1
#define SYMBOL_CHARSET 2
#define SHIFTJIS_CHARSET 128
#define HANGEUL_CHARSET 129
#define HANGUL_CHARSET 129
#define GB2312_CHARSET 134
#define CHINESEBIG5_CHARSET 136
#define OEM_CHARSET 255
#if(WINVER >= 0x0400)
#define JOHAB_CHARSET 130
#define HEBREW_CHARSET 177
#define ARABIC_CHARSET 178
#define GREEK_CHARSET 161
#define TURKISH_CHARSET 162
#define VIETNAMESE_CHARSET 163
#define THAI_CHARSET 222
#define EASTEUROPE_CHARSET 238
#define RUSSIAN_CHARSET 204
#define MAC_CHARSET 77
#define BALTIC_CHARSET 186
OEM_CHARSET指定的字符集与操作系统有关
9) iOutPrecision:指定输出精度,输出精度义输出与要求的字体高度、宽度、字符定位、移位、字符间距和字符类型的匹配程序
它可取下列值之中的一个:
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字体、其它基于边框的字体和向量字体被列举时,作为返回值。
Windows 95:此值没有被字体映射器使用。可是当TrueType字体或向量字体被列举时。作为返回值。
OUT_TT_ONLY_PRECIS:指示字体映射器仅从TrueType字体中选择,假设系统中没有安装TrueType字体,则字体映射返回缺省状态。、
OUT_TT_PRECIS:指示字体映射器在当系统里有多种同名的字体时选择一种TrueType字体。
当操作系统含有多种与指定名字同名的字体时。应用程序能够使用OUT_DEVICE_PRECIS,OUT_RASTER_PRECIS和OUT_TT_PRECIS值来控制字体映射器怎样选择一种字体,比如,假设操作系统含有名字Symbol的光栅和TrueType两种字体,指定OUT_TT_PRECIS使字体映射器选择TrueType方式。指定OUT_TT_ONLY_PRECIS使字体映射器选择一种TrueType字体。虽然这会给TrueType字体换一个名字。
#define OUT_DEFAULT_PRECIS 0
#define OUT_STRING_PRECIS 1
#define OUT_CHARACTER_PRECIS 2
#define OUT_STROKE_PRECIS 3
#define OUT_TT_PRECIS 4
#define OUT_DEVICE_PRECIS 5
#define OUT_RASTER_PRECIS 6
#define OUT_TT_ONLY_PRECIS 7
#define OUT_OUTLINE_PRECIS 8
#define OUT_SCREEN_OUTLINE_PRECIS 9
#define OUT_PS_ONLY_PRECIS 10
10) iClipPrecision:指定裁剪精度。裁剪精度定义怎样裁剪部分超出裁剪区的字符
它可取一个或多个下列值:
CLIP_DEFAULT_PRECIS:指定缺省裁剪状态。
CLIP_CHARACTER_PRECIS:未用。
CLIP_STROKE_PRECIS:未被字体映射器使用,可是当光栅字体、向量字体或TrueType字体被列举时作为返回值。
在Windows环境下。为保证兼容性。当列举字体时这个值总被返回。
CLIP_MASK:未用。CLIP_EMBEDDED:要使用嵌入式仅仅读字体必须使用此标志。
CLIP_LH_ANGLES:当此值被使用时,全部字体的旋转依赖于坐标系统的定位是朝左的还是朝右的。
假设未使用此值,设备字体总是逆时针方向旋转,但其它字体的旋转依赖于坐标系统的定向。要得到很多其它关于坐标系统定向的信息,參见參数orientation。
CLIP_TT_ALWAYS:未用。
#define CLIP_DEFAULT_PRECIS 0
#define CLIP_CHARACTER_PRECIS 1
#define CLIP_STROKE_PRECIS 2
#define CLIP_MASK 0xf
#define CLIP_LH_ANGLES (1<<4)
#define CLIP_TT_ALWAYS (2<<4)
11) iQuality:指向输出质量。输出质量定义GDI怎样细致地将逻辑字体属性与实际物理字体属性相匹配。
它可取下列值之中的一个:
DEFAULT_QUALITY:字体的外观不重要。
DRAFT_QUALITY:字体外观的重要性次于使用PROOF_QUALITY时,对GDI光栅字体,缩放比例是活动的,这意味着多种字体大小可供选择。但质量可能不高。假设有必要,粗体、斜体、下划线、strikeout字体可被综合起来使用。
PROOF_QUALITY:字符质量比精确匹配逻辑字体字体属性更重要。对GDI扫描字体,缩放比例是活动的,并选择最接近的大小。虽然当使用PROOF_QUALITY时。选择字体大小并不完全匹配,但字体的质量非常高。并没有外观上的变形。假设有必要,粗体、斜体、下划线、strikeout字体可被综合起来使用。
#define DEFAULT_QUALITY 0
#define DRAFT_QUALITY 1
#define PROOF_QUALITY 2
12) iPitchAndFamily:指定字体间距和字体族。低端二位指定字体的字符间距,它可取下列值之中的一个:
DEFAULT_PITCH: 0
FIXED_PITCH: 1
VARIABLE_PITCH: 2
高端四位指定字体族,可取下列值之中的一个:
FF_DECORATIVE:新鲜的字体。如老式英语(Old English)。
FF_DONTCARE:不关心或不知道。
FF_MDERN:笔划宽度固定的字体,有或者无衬线。
如Pica、Elite和Courier New。
FF_ROMAN:笔划宽度变动的字体,有衬线。如MS Serif。
FF_SCRIPT:设计成看上去象手写体的字体。
如Script和Cursive。
FF_SWISS:笔划宽度变动的字体。无斜线。如MS Sans Serif。
应用程序能够用运算符OR将字符间距和字体族组合起来给fdwPitchAndFamily赋值。
字体族描写叙述一种字体的普通外观,当全部的精确字样都不能使用时,可用它们来指定字体。
#define FF_DONTCARE (0<<4) /* Don't care or don't know. */
#define FF_ROMAN (1<<4) /* Variable stroke width, serifed. */
/* Times Roman, Century Schoolbook, etc. */
#define FF_SWISS (2<<4) /* Variable stroke width, sans-serifed. */
/* Helvetica, Swiss, etc. */
#define FF_MODERN (3<<4) /* Constant stroke width, serifed or sans-serifed. */
/* Pica, Elite, Courier, etc. */
#define FF_SCRIPT (4<<4) /* Cursive, etc. */
#define FF_DECORATIVE (5<<4) /* Old English, etc. */
13) pszFaceName:指向指定字体的字样名的、以/0结束的字符串指针,字符串的长度不能超过32个字符(包含字符/0),函数EnumFontFamilies可用来列举全部当前可用字体的字样名。
假设pszFaceName为NULL或指向一个空串。GDI使用能匹配其它属性的第一种字体。