[in] cHeight
字体字符单元格或字符的高度(以逻辑单位为单位)。 字符高度值(也称为 em 高度)是字符单元格高度值减去内部前导值。 字体映射器按以下方式解释
nHeight
中指定的值。
对于MM_TEXT映射模式,可以使用以下公式为具有指定点大小的字体指定高度:
nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
[in] cWidth
请求字体中字符的平均宽度(以逻辑单位为单位)。 如果此值为零,则字体映射器选择最近的匹配值。 最近的匹配值是通过比较当前设备的纵横比与可用字体的数字化纵横比之间的绝对值来确定的。
[in] cEscapement
转义向量与设备的 x 轴之间的角度(以十分之为单位)。 转义向量与文本行的基线并行。
当图形模式设置为GM_ADVANCED时,可以指定字符串的转义角度,而与字符串字符的方向角度无关。
当图形模式设置为GM_COMPATIBLE时,
nEscapement
同时指定转义和方向。 应
nEscapement
,
并将 nOrientation
设置为相同的值。
[in] cOrientation
每个字符的底线与设备的 x 轴之间的角度(以十分之为单位)。
[in] cWeight
0 到 1000 范围内的字体粗细。 例如,400 正常,700 为粗体。 如果此值为零,则使用默认权重。
为方便起见,定义了以下值。
OEM_CHARSET值指定依赖于操作系统的字符集。
DEFAULT_CHARSET设置为基于当前系统区域设置的值。 例如,当系统区域设置为英语(美国)时,系统区域设置设置为ANSI_CHARSET。
操作系统中可能存在具有其他字符集的字体。 如果应用程序使用具有未知字符集的字体,则不应尝试翻译或解释使用该字体呈现的字符串。
若要确保创建字体时的结果一致,请不要指定OEM_CHARSET或DEFAULT_CHARSET。 如果在
lpszFace
参数中指定字样名称,请确保
fdwCharSet
值与
lpszFace
中指定的字样字符集匹配。
[in] iOutPrecision
输出精度。 输出精度定义输出必须与所请求字体的高度、宽度、字符方向、转义、间距和字体类型相匹配的方式。 它可以是以下值之一。
应用程序可以使用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 字体。
[in] iClipPrecision
剪辑精度。 剪辑精度定义如何剪辑部分超出剪辑区域的字符。 它可以是以下一个或多个值。
如果输出质量DEFAULT_QUALITY、DRAFT_QUALITY或PROOF_QUALITY,则如果SPI_GETFONTSMOOTHING系统参数
TRUE
,则字体将反锯齿。 用户可以从控制面板控制此系统参数。 (控制面板中设置的精确措辞取决于 Windows 的版本,但它将是“屏幕字体平滑边缘”的效果。
[in] iPitchAndFamily
字体的音调和系列。 两个低序位指定字体的间距,可以是以下值之一:
DEFAULT_PITCH
FIXED_PITCH
VARIABLE_PITCH
四个高序位指定字体系列,可以是以下值之一。
应用程序可以使用布尔 OR 运算符将音调常量与系列常量联接,为
fdwPitchAndFamily
参数指定值。
字体系列以一般方式描述字体的外观。 当请求的确切字样不可用时,它们用于指定字体。
[in] pszFaceName
指向以 null 结尾的字符串的指针,该字符串指定字体的字样名称。 此字符串的长度不得超过 32 个字符,包括终止 null 字符。
EnumFontFamilies
函数可用于枚举所有当前可用字体的字样名称。 有关详细信息,请参阅“备注”。
如果
lpszFace
NULL
或空字符串,GDI 将使用与其他指定属性匹配的第一个字体。
如果函数成功,则返回值是逻辑字体的句柄。
如果函数失败,则返回值
NULL
。
不再需要字体时,请调用
DeleteObject
函数将其删除。
为了帮助保护为 Windows 提供字体的供应商的版权,应用程序应始终报告所选字体的确切名称。 由于可用的字体可能因系统而异,因此不要假定所选字体始终与所请求的字体相同。 例如,如果请求名为 Palatino 的字体,但系统上没有此类字体,则字体映射器将替换具有类似属性但名称不同的字体。 始终向用户报告所选字体的名称。
若要在操作系统的不同语言版本上获取适当的字体,请使用
LOGFONT
结构中所需的字体特征调用
EnumFontFamiliesEx
,然后使用
createFont
或
CreateFontIndirect
检索相应的字样名称并创建字体。
CreateFont
、
CreateFontIndirect
的字体映射器,
CreateFontIndirectEx
可识别英语和本地化字样名称,而不考虑区域设置。
以下情况不支持 ClearType 反锯齿:
在打印机上呈现的文本。
256 种颜色或更少颜色的显示集。
呈现到终端服务器客户端的文本。
字体不是 TrueType 字体,也不是具有 TrueType 轮廓的 OpenType 字体。 例如,以下不支持 ClearType 抗锯齿:类型 1 字体、Postscript OpenType 字体(不含 TrueType 轮廓、位图字体、矢量字体和设备字体)。
字体已调整嵌入位图,仅针对包含嵌入位图的字号。 例如,这通常发生在东亚字体中。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
case WM_PAINT:
RECT rect;
HFONT hFontOriginal, hFont1, hFont2, hFont3;
hdc = BeginPaint(hWnd, &ps);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 48 pixels in height.
//The width, when set to 0, will cause the font mapper to choose the closest matching value.
//The font face name will be Impact.
hFont1 = CreateFont(48,0,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Impact"));
hFontOriginal = (HFONT)SelectObject(hdc, hFont1);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 100,100,700,200);
SetTextColor(hdc, RGB(255,0,0));
DrawText(hdc, TEXT("Drawing Text with Impact"), -1,&rect, DT_NOCLIP);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
//The width, when set to 20, will cause the font mapper to choose a font which, in this case, is stretched.
//The font face name will be Times New Roman. This time nEscapement is at -300 tenths of a degree (-30 degrees)
hFont2 = CreateFont(36,20,-300,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Times New Roman"));
SelectObject(hdc,hFont2);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 100, 200, 900, 800);
SetTextColor(hdc, RGB(0,128,0));
DrawText(hdc, TEXT("Drawing Text with Times New Roman"), -1,&rect, DT_NOCLIP);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
//The width, when set to 10, will cause the font mapper to choose a font which, in this case, is compressed.
//The font face name will be Arial. This time nEscapement is at 250 tenths of a degree (25 degrees)
hFont3 = CreateFont(36,10,250,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY, VARIABLE_PITCH,TEXT("Arial"));
SelectObject(hdc,hFont3);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 500, 200, 1400, 600);
SetTextColor(hdc, RGB(0,0,255));
DrawText(hdc, TEXT("Drawing Text with Arial"), -1,&rect, DT_NOCLIP);
SelectObject(hdc,hFontOriginal);
DeleteObject(hFont1);
DeleteObject(hFont2);
DeleteObject(hFont3);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
return 0;
有关另一个示例,请参阅 “使用菜单设置 Menu-Item 文本字符串的字体”。
wingdi.h 标头将 CreateFont 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。