CreateFont函数创建具有特定特征的逻辑字体。随后可以选择逻辑字体作为任何设备的字体。
HFONT CreateFont(
INT 【nHeight参数】, | //字体的逻辑高度 |
INT 【nWidth】, | //逻辑平均字符宽度 |
INT 【nEscapement】, | //擒纵角 |
INT 【nOrientation】, | //基线取向角度 |
INT 【fnWeightde】, | //字体重量 |
DWORD 【fdwItalic】, | //斜体属性标志 |
DWORD 【fdwUnderline】, | //下划线属性标志 |
DWORD 【fdwStrikeOut】, | //删除属性标志 |
DWORD 【fdwCharSet】, | //字符集标识符 |
DWORD 【fdwOutputPrecision】, | //输出精度 |
DWORD 【fdwClipPrecision】, | //剪辑精度 |
DWORD 【fdwQuality】, | //输出质量 |
DWORD 【fdwPitchAndFamily】, | //音调和家庭 |
LPCTSTR 【lpszFacehu】 | //指向字体名称字符串的指针 |
); |
参数
【nHeight参数】
指定字体的字符单元格或字符的逻辑单位的高度。字符高度值(也称为高度)是字符单元格高度值减去内部前导值。字体映射器以下列方式解释【nHeight参数】中指定的值:
值 | 含义 |
> 0 | 字体映射器将此值转换为设备单位,并将其与可用字体的单元格高度进行匹配。 |
0 | 当搜索匹配时,字体映射器使用默认高度值。 |
< 0 | 字体映射器将此值转换为设备单位,并将其绝对值与可用字体的字符高度相匹配。 |
对于所有高度比较,字体映射器将查找不超过请求的大小的最大字体。
当首次使用该字体时,会发生此映射。
对于MM_TEXT映射模式,可以使用以下公式来指定具有指定点大小的字体的高度:
nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
【nWidth】
指定所请求字体中字符的平均宽度(以逻辑为单位)。如果该值为零,则字体映射器将选择“最匹配”值。通过比较当前设备的宽高比和可用字体的数字化宽高比之间的差异的绝对值来确定“最接近的匹配”值。
【nEscapement】
指定擒纵矢量与设备x轴之间的角度(以十分之一度为单位)。擒纵矢量平行于一行文字的基线。
Windows NT:
当图形模式设置为GM_ADVANCED时,您可以独立于字符串字符的方位角指定字符串的擒纵角度。
当图形模式设置为GM_COMPATIBLE时,【nEscapement】同时指定擒纵轮廓和方向。您应该将【nEscapement】和【nOrientation】设置为相同的值。
Windows 95:
【nEscapement】参数同时指定了擒纵和取向。您应该将【nEscapement】和【nOrientation】设置为相同的值。
【nOrientation】
指定每个字符的基线和设备的x轴之间的角度(以十分之一度为单位)。
【fnWeightde】
指定字体在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 |
【fdwItalic】
如果设置为TRUE,则指定斜体字体。
【fdwUnderline】
如果设置为TRUE,则指定下划线字体。
【fdwStrikeOut】
指定一个删除字体,如果设置为TRUE。
【fdwCharSet】
指定字符集。以下值是预定义的:
ANSI_CHARSET
DEFAULT_CHARSET
SYMBOL_CHARSET
SHIFTJIS_CHARSET
GB2312_CHARSET
HANGEUL_CHARSET
CHINESEBIG5_CHARSET
OEM_CHARSET
仅Windows 95:
JOHAB_CHARSET
HEBREW_CHARSET
ARABIC_CHARSET
GREEK_CHARSET
TURKISH_CHARSET
THAI_CHARSET
EASTEUROPE_CHARSET
RUSSIAN_CHARSET
MAC_CHARSET
BALTIC_CHARSET
OEM_CHARSET值指定与操作系统相关的字符集。
您可以使用DEFAULT_CHARSET值来允许字体的名称和大小来完全描述逻辑字体。如果指定的字体名称不存在,则可以用任何字符集替换指定字体的字体,因此应谨慎使用DEFAULT_CHARSET以避免意外的结果。
具有其他字符集的字体可能存在于操作系统中。如果应用程序使用具有未知字符集的字体,则不应尝试翻译或解释使用该字体呈现的字符串。
该参数在字体映射过程中很重要。为了确保一致的结果,请指定一个特定的字符集。如果在【lpszFacehu】参数中指定了一个字体名称,请确保【fdwCharSet】的值与【lpszFace。hu】中指定的字体的字符集相匹配
【fdwOutputPrecision】
指定输出精度。输出精度定义输出必须与请求的字体的高度,宽度,字符方向,擒纵,音高和字体类型的匹配程度。它可以是以下值之一:
值 | 含义 |
OUT_CHARACTER_PRECIS | 不曾用过。 |
OUT_DEFAULT_PRECIS | 指定默认的字体映射器行为。 |
OUT_DEVICE_PRECIS | 当系统包含多个同名的字体时,指示字体映射器选择设备字体。 |
OUT_OUTLINE_PRECIS | Windows NT:此值指示字体映射器从TrueType和其他基于轮廓的字体中进行选择。 Windows 95:不使用此值。 |
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值来控制当操作系统包含多个具有指定名称的字体时字体映射器如何选择字体。例如,如果操作系统在栅格和TrueType格式中包含名为Symbol的字体,则指定OUT_TT_PRECIS将强制字体映射器选择TrueType版本。指定OUT_TT_ONLY_PRECIS强制字体映射器选择TrueType字体,即使它必须替换另一个名称的TrueType字体。
【fdwClipPrecision】
指定裁剪精度。剪辑精度定义了如何剪辑部分在裁剪区域之外的字符。它可以是一个或多个以下值:
值 | 含义 |
CLIP_DEFAULT_PRECIS | 指定默认裁剪行为。 |
CLIP_CHARACTER_PRECIS | 不曾用过。 |
CLIP_STROKE_PRECIS | 字体映射器不使用,但在枚举栅格,矢量或TrueType字体时返回。 Windows NT:为了兼容,枚举字体时始终返回此值。 |
CLIP_MASK | 不曾用过。 |
CLIP_EMBEDDED | 您必须指定此标志才能使用嵌入式只读字体。 |
CLIP_LH_ANGLES | 当使用此值时,所有字体的旋转取决于坐标系的方向是左撇子还是右撇子。 如果不使用,设备字体总是逆时针旋转,但其他字体的旋转取决于坐标系的方向。 有关坐标系方位的更多信息,请参阅【nOrientation】参数的说明 |
CLIP_TT_ALWAYS | 不曾用过。 |
【fdwQuality】
指定输出质量。输出质量定义了GDI必须如何仔细地将逻辑字体属性与实际物理字体的属性进行匹配。它可以是以下值之一:
值 | 含义 |
DEFAULT_QUALITY | 外观的字体没关系。 |
DRAFT_QUALITY | 字体的外观不如使用PROOF_QUALITY值重要。对于GDI光栅字体,缩放已启用,这意味着可以使用更多字体大小,但质量可能会较低。必要时,合成粗体,斜体,下划线和删除字体。 |
PROOF_QUALITY | 字体的字符质量比逻辑字体属性的精确匹配更重要。对于GDI光栅字体,缩放被禁用,并且选择最接近的字体大小。虽然当使用PROOF_QUALITY时,所选择的字体大小可能不会被精确映射,但是字体的质量很高,并且没有外观的扭曲。必要时,合成粗体,斜体,下划线和删除字体。 |
【fdwPitchAndFamily】
指定字体的音高和系列。两个低位指定字体的音高,可以是以下值之一:
DEFAULT_PITCH
FIXED_PITCH
VARIABLE_PITCH
四个高位指定字体系列,可以是以下值之一:
值 | 描述 |
FF_DECORATIVE | 新奇字体老英语就是一个例子。 |
FF_DONTCARE | 不在乎或不知道。 |
FF_MODERN | 具有不间断行程宽度的字体,带或不带衬线。Pica,Elite和Courier New都是例子。 |
FF_ROMAN | 具有可变行程宽度和衬线的字体。MS Serif就是一个例子。 |
FF_SCRIPT | 字体设计看起来像手写。脚本和草书是例子。 |
FF_SWISS | 具有可变行程宽度和无衬线的字体。MS Sans Serif是一个例子。 |
应用程序可以通过使用布尔OR运算符将具有族常数的音调常数连接到【fdwPitchAndFamily】参数的值。
字体以一般方式描述字体的外观。它们用于在请求的确切字体不可用时指定字体。
【lpszFacehu】
指向一个以空字符结尾的字符串,指定字体的字体名称。此字符串的长度不得超过32个字符,包括空终止符。EnumFontFamilies函数可用于枚举所有当前可用字体的字体名称。
如果【lpszFacehu】为NULL或指向空字符串,则GDI将使用与其他指定属性相匹配的第一个字体。
返回值
如果函数成功,则返回值是逻辑字体的句柄。
如果函数失败,返回值为NULL。要获取扩展错误信息,请调用GetLastError.
备注
当您不再需要该字体时,请调用DeleteObject功能将其删除。
为了帮助保护为Windows操作系统提供字体的供应商的版权,应用程序应始终报告所选字体的确切名称。因为可用字体可能因系统而异,请勿假定所选字体始终与请求的字体相同。例如,如果您要求一个名为“Palatino”的字体,但系统上没有这样的字体,则字体映射器将替换具有相似属性但名称不同的字体。始终向用户报告所选字体的名称。
也可以看看