勇芳软件工作室.汉化:  Fonts and Text > Fonts and Text Functions >

CreateFont

Previous pageReturn to chapter overviewNext page

描述

 

CreateFont函数创建具有指定特征的逻辑字体。随后可以选择逻辑字体作为任何设备的字体。

 

C++ 语法

 

HFONT CreateFont(

__in int nHeight,

__in int nWidth,

__in int nEscapement,

__in int nOrientation,

__in int fnWeight,

__in DWORD fdwItalic,

__in DWORD fdwUnderline,

__in DWORD fdwStrikeOut,

__in DWORD fdwCharSet,

__in DWORD fdwOutputPrecision,

__in DWORD fdwClipPrecision,

__in DWORD fdwQuality,

__in DWORD fdwPitchAndFamily,

__in LPCTSTR lpszFace

);

 

PowerBASIC 语法

 

FUNCTION CreateFontA ( _

BYVAL nHeight AS LONG, _

BYVAL nWidth AS LONG, _

BYVAL nEscapement AS LONG, _

BYVAL nOrientation AS LONG, _

BYVAL fnWeight AS LONG, _

BYVAL fdwItalic AS DWORD, _

BYVAL fdwUnderline AS DWORD, _

BYVAL fdwStrikeOut AS DWORD, _

BYVAL fdwCharSet AS DWORD, _

BYVAL fdwOutputPrecision AS DWORD, _

BYVAL fdwClipPrecision AS DWORD, _

BYVAL fdwQuality AS DWORD, _

BYVAL fdwPitchAndFamily AS DWORD, _

BYREF lpszFace AS ASCIIZ _

) AS DWORD

 

Unicode版本:

 

FUNCTION CreateFontW ( _

BYVAL nHeight AS LONG, _

BYVAL nWidth AS LONG, _

BYVAL nEscapement AS LONG, _

BYVAL nOrientation AS LONG, _

BYVAL fnWeight AS LONG, _

BYVAL fdwItalic AS DWORD, _

BYVAL fdwUnderline AS DWORD, _

BYVAL fdwStrikeOut AS DWORD, _

BYVAL fdwCharSet AS DWORD, _

BYVAL fdwOutputPrecision AS DWORD, _

BYVAL fdwClipPrecision AS DWORD, _

BYVAL fdwQuality AS DWORD, _

BYVAL fdwPitchAndFamily AS DWORD, _

BYREF lpszFace AS WSTRINGZ _

) AS DWORD

 

参数

 

nHeight

 

[in]指定字体的字符单元格或字符的逻辑单位高度。字符高度值(也称为高度)是字符单元格高度值减去内部前导值。字体映射器以下列方式解释nHeight中指定的值。

 

含义

> 0

字体映射器将此值转换为设备单位,并将其与可用字体的单元格高度进行匹配。

0

当搜索匹配时,字体映射器使用默认高度值。

< 0

字体映射器将此值转换为设备单位,并将其绝对值与可用字体的字符高度相匹配。

 

对于所有高度比较,字体映射器将查找不超过请求的大小的最大字体。

 

当首次使用该字体时,会发生此映射。

 

对于MM_TEXT映射模式,您可以使用以下公式指定具有指定点大小的字体的高度:

 

nHeight = -MulDiv(PointSize,GetDeviceCaps(hDC,%LOGPIXELSY),72)

 

nWidth

 

[in]指定所请求字体中字符的平均宽度(以逻辑为单位)。如果该值为零,则字体映射器将选择最接近的匹配值。通过比较当前设备的宽高比和可用字体的数字化宽高比之间的差异的绝对值来确定最接近的匹配值。

 

nEscapement

 

[in]指定擒纵矢量和设备x轴之间的角度,以十分之一度为单位。擒纵矢量平行于一行文字的基线。

 

Windows NT / 2000 / XP / Vista / Windows 7:当图形模式设置为GM_ADVANCED时,您可以独立于字符串字符的方位角指定字符串的擒纵角度。

 

当图形模式设置为GM_COMPATIBLE时,nEscapement指定了擒纵轮廓和方向。您应该将nEscapementnOrientation设置为相同的值。

 

Windows 95/98 / MenEscapement参数同时指定了擒纵和方向。您应该将nEscapementnOrientation设置为相同的值。

 

nOrientation

 

[in]指定每个字符的基线和设备的x轴之间的角度(以十分之一度为单位)。

 

fnWeight

 

[in]指定字体在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

 

[in]如果设置为TRUE,则指定斜体字体。

 

fdwUnderline

 

[in]如果设置为TRUE,则指定下划线字体。

 

fdwStrikeOut

 

[in]如果设置为TRUE,则指定删除字体。

 

fdwCharSet

 

[in]指定字符集。以下值是预定义的:

 

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

 

韩语版Windows:

JOHAB_CHARSET

中东语言版Windows:

ARABIC_CHARSET

HEBREW_CHARSET

泰语版Windows:

THAI_CHARSET

 

OEM_CHARSET值指定与操作系统相关的字符集。

 

Windows 95/98 / Me:您可以使用DEFAULT_CHARSET值来允许字体的名称和大小来完全描述逻辑字体。如果指定的字体名称不存在,则可以用任何字符集替换指定字体的字体,因此您应谨慎使用DEFAULT_CHARSET以避免意外的结果。

 

Windows NT / 2000 / XP / Vista / Windows 7:DEFAULT_CHARSET设置为基于当前系统区域设置的值。例如,当系统区域设置为英文(美国)时,将其设置为ANSI_CHARSET。

 

具有其他字符集的字体可能存在于操作系统中。如果应用程序使用具有未知字符集的字体,则不应尝试翻译或解释使用该字体呈现的字符串。

 

为确保创建字体时的一致结果,请勿指定OEM_CHARSET或DEFAULT_CHARSET。如果在lpszFacehu参数中指定了字体名称,请确保fdwCharSet值与lpszFacehu中指定的字体的字符集相匹配。

 

fdwOutputPrecision

 

[in]指定输出精度。输出精度定义输出必须与请求的字体的高度,宽度,字符方向,擒纵,音高和字体类型匹配的程度。它可以是以下值之一。

 

含义

OUT_CHARACTER_PRECIS

不曾用过。

OUT_DEFAULT_PRECIS

指定默认的字体映射器行为。

OUT_DEVICE_PRECIS

当系统包含多个同名的字体时,指示字体映射器选择设备字体。

OUT_OUTLINE_PRECIS

Windows NT / 2000 / XP/ VISTA / Windows 7的:此值指示字体映射器从TrueType和其他基于轮廓的字体中进行选择。

OUT_PS_ONLY_PRECIS

Windows 2000 / XP/ VISTA / Windows 7的:指示字体映射器仅从PostScript字体中进行选择。如果系统中没有安装PostScript字体,则字体映射器将返回到默认行为。

OUT_RASTER_PRECIS

当系统包含多个具有相同名称的字体时,指示字体映射器选择栅格字体。

OUT_STRING_PRECIS

字体映射器不使用此值,但是在列出栅格字体时会返回此值。

OUT_STROKE_PRECIS

Windows NT / 2000 / XP/ VISTA / Windows 7的:字体映射程序不使用此值,但是在列出TrueType,其他基于轮廓的字体和向量字体时会返回此值。

 

Windows 95/98 / Me:该值用于映射矢量字体,并在枚举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字体。

 

fdwClipPrecision

 

[in]指定裁剪精度。剪辑精度定义了如何剪辑部分在裁剪区域之外的字符。它可以是一个或多个以下值。

 

含义

CLIP_CHARACTER_PRECIS

不曾用过。

CLIP_DEFAULT_PRECIS

指定默认裁剪行为。

CLIP_DFA_DISABLE

Windows XP SP1:关闭字体的字体关联。请注意,这个标志不能保证在Windows Server 2003之后对任何平台有任何影响。

CLIP_EMBEDDED

您必须指定此标志才能使用嵌入式只读字体。

CLIP_LH_ANGLES

当使用此值时,所有字体的旋转取决于坐标系的方向是左撇子还是右撇子。

 

如果不使用,设备字体总是逆时针旋转,但其他字体的旋转取决于坐标系的方向。

 

有关坐标系方向的更多信息,请参阅nOrientation参数的说明

CLIP_MASK

Windows 2000:关闭字体的字体关联。这与CLIP_DFA_DISABLE相同,但在某些情况下可能会出现问题;要使用的推荐标志是CLIP_DFA_DISABLE。

CLIP_STROKE_PRECIS

字体映射程序不使用,但在枚举栅格,向量或TrueType字体时返回。

 

Windows NT / 2000 / XP/ VISTA / Windows 7的:为了兼容,枚举字体时始终返回此值。

CLIP_TT_ALWAYS

不曾用过。

 

fdwQuality

 

[in]指定输出质量。输出质量定义了GDI必须如何仔细地将逻辑字体属性与实际物理字体的属性进行匹配。它可以是以下值之一。

 

含义

ANTIALIASED_QUALITY

Windows NT 4.0及更高版本:如果字体支持字体并且字体的大小不太小或太大,则字体是抗锯齿或平滑的。

 

Windows 95与Plus !, Windows 98 / Me:显示器必须大于8位颜色,它必须是单平面设备,它不能是调色板显示,并且不能在多显示监视器设置中。另外,在DIBSection中使用之前,您必须在屏幕DC中选择TrueType字体,否则不会产生抗锯齿。

CLEARTYPE_QUALITY

Windows XP:如果设置,使用ClearType抗锯齿方法渲染文本(如果可能)。有关详细信息,请参阅备注。

DEFAULT_QUALITY

外观的字体没关系。

DRAFT_QUALITY

字体的外观不如使用PROOF_QUALITY值重要。对于GDI栅格字体,缩放已启用,这意味着更多的字体大小可用,但质量可能会较低。必要时,合成粗体,斜体,下划线和删除字体。

NONANTIALIASED_QUALITY

Windows 95与Plus !, Windows 98 / Me,Windows NT 4.0及更高版本:字体从不是抗锯齿的,即字体平滑没有完成。

PROOF_QUALITY

字体的字符质量比逻辑字体属性的精确匹配更重要。对于GDI光栅字体,缩放被禁用,并且选择最接近的字体大小。虽然当使用PROOF_QUALITY时,所选择的字体大小可能不会被精确映射,但是字体的质量很高,并且没有外观的扭曲。必要时,合成粗体,斜体,下划线和删除字体。

 

如果输出质量为DEFAULT_QUALITY,DRAFT_QUALITY或PROOF_QUALITY,则如果SPI_GETFONTSMOOTHING系统参数为TRUE,则字体为抗锯齿。用户可以从控制面板控制此系统参数。(控制面板中设置的准确措辞取决于Windows的版本,但会影响“屏幕字体平滑边缘”的效果。)

 

fdwPitchAndFamily

 

[in]指定字体的音高和系列。两个低位指定字体的音高,可以是以下值之一:

 

·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参数的值。

 

字体以一般方式描述字体的外观。它们用于在请求的确切字体不可用时指定字体。

 

lpszFace

 

[in]指向指定字体字体名称的以空值终止的字符串的指针。此字符串的长度不得超过32个字符,包括终止空字符。EnumFontFamilies函数可用于枚举所有当前可用字体的字体名称。有关详细信息,请参阅备注。

 

如果lpszFacehu为NULL或空字符串,则GDI将使用与其他指定属性相匹配的第一个字体。

 

返回值

 

如果函数成功,则返回值是逻辑字体的句柄。

 

如果函数失败,返回值为NULL。

 

Windows NT / 2000 / XP / Vista / Windows 7:要获取扩展错误信息,请调用GetLastError.

 

备注

 

当您不再需要该字体时,请调用DeleteObject功能将其删除。

 

为了帮助保护为Windows提供字体的供应商的版权,应用程序应始终报告所选字体的确切名称。因为可用字体可能因系统而异,请勿假定所选字体始终与请求的字体相同。例如,如果您要求一个名为Palatino的字体,但系统上没有这样的字体,则字体映射器将替换具有相似属性但名称不同的字体。始终向用户报告所选字体的名称。

 

要在不同语言版本的操作系统上获得适当的字体,请在LOGFONT结构中调用EnumFontFamiliesEx所需的字体特征,然后检索相应的字体名称,并使用CreateFont或CreateFontIndirect创建字体。

 

Windows 95/98 / Me,Windows NT 4.0:许多东亚语言的字体有两个字体名称:英文名称和本地化名称。CreateFontCreateFontIndirectCreateFontIndirectEx在与该语言匹配的系统区域设置上使用本地化字体名称,但它们在所有其他系统区域设置上采用英文字体名称。最好的方法是尝试一个名字,失败后再试一下。请注意,如果系统区域设置与字体的语言不符,则EnumFontsEnumFontFamiliesEnumFontFamiliesEx返回英文字体名称。

 

Windows 2000 / XP / Vista / Windows 7CreateFontCreateFontIndirectCreateFontIndirectEx的字体映射程序会识别英文和本地化字体名称,而不管语言环境。

 

Windows XP:以下情况不支持ClearType抗锯齿:

 

·在打印机上呈现的文字。
·256色以下的显示。
·文本呈现给终端服务器客户端。
·该字体不是TrueType字体或具有TrueType轮廓的OpenType字体。例如,以下不支持ClearType抗锯齿:Type 1字体,Postscript OpenType字体,没有TrueType大纲,位图字体,矢量字体和设备字体。
·该字体已调整嵌入式位图,仅适用于包含嵌入式位图的字体大小。例如,这在东亚字体中常见。

 

Windows 95/98 / Me:Microsoft Layer for Unicode支持CreateFontW.

 

引用文件 #INCLUDE Once

 

WinGdi.inc(包括Windows.inc)