字体小谈:CreateFont和LOGFONT

50 篇文章 0 订阅

字体小谈:CreateFont和LOGFONT
2014年02月24日 ⁄ 综合 ⁄ 共 3719字 ⁄ 字号 小 中 大 ⁄ 评论关闭
typedef struct tagLOGFONT
{
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;

lfHeight:以逻辑单位指定字体字符元(character cell)或字符的高度。字符高度值为字符元高度值减去内部行距(internal-leading)值。
当lfHeight大于0时,字体映射程序将该值转换为设备单位,并将它与可用字体的字符元高度进行匹配;
当该参数为0时,字体映射程度将使用一个匹配的默认高度值;
如果参数的值小于0,则将其转换为设备单位,并将其绝对值与可用字体的字符高度进行匹配。对于任何一种情况,字体映射程度最终得到的字体高度值不会超过所指定的值。以MM_TEXT映射模式下,字体高度值和磅值有如下的换算公式:lfHeight=-MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
lfWidth:以逻辑单位指定字体字符的平均宽度。如果lfWidth的值为0,则根据设备的纵横比从可用字体的数字转换纵横中选取最接近的匹配值,该值通过比较两者之间的差异的绝对值得出。
lfEscapement:以十分之一度为单位指定每一行文本输出时相对于页面底端的角度。
ifOrientation:以十分之一度为单位指定字符基线相对于页面底端的角度。

lfWeight: 指定字体重量。在Windows中,字体重量这个术语用来指代字体的粗细程度。lfWeight的范围为0到1000,正常情况下的字体重量为400,粗体为700。如果lfWeight为0,则使用默认的字体重量。

lfItalic:当lfItalic为TRUE时使用斜体

lfUnderline:当lfUnderline为TRUE时给字体添加下划线

lfStrikeOut:当lfStrikeOut为TRUE时给字体添加删除线
lfCharSet:指定字符集。可以使用下面的预定义值:ANSI_CHARSET、OEM_CHARSET、SYMBOL_CHARSET、
UNICODE_CHARSET,其中OEM字符集是与操作系统相关的。
lfOutPrecision:指定输出精度。输出精度定义了输出与所要求的字体高度、宽度、字符方向等的接近程度。它可以为下面的值之一:OUT_CHARACTER_PRECIS、OUT_DEFAULT_PRECIS、OUT_STRING_PRECIS、OUT_STROKE_PRECIS
lfClipPrecision:指定剪辑精度。剪辑精度定义了当字符的一部分超过剪辑区域时对字符的剪辑方式,它可以为下列值之一:CLIP_CHARACTER_PRECIS、CLIP_DEFAULT_PRECIS、CLIP_STROKE_PRECIS
lfQuality: 定义输出质量。输出质量定义了图形设备接口在匹配逻辑字体属性到实际的物理字体的所使用的方式,它可以为下列值之一:DEFAULT_QUALITY (默认质量)、DRAFT_QUALITY (草稿质量)、PROOF_QUALITY (正稿质量)
lfPitchAndFamily:指定字体的字符间距和族。最低两位指定字体的字符间距为以下值之一:DEFAULT_PITCH、
FIXED_PITCH、VARIABLE_PITCH第4到7位指定字体族为以下值之一:FF_DECORATIVE、FF_DONTCARE、FF_MODERN、FF_ROMAN、FF_SCRIPT、FF_SWISS这些值的具体含义可以参考Visual C++中关于结构LOGFONT的文档。字符间距和字体族可以使用逻辑或(OR)运算符来进行组合。
lfFaceName: 一个指定以NULL结尾的字符串的指针,它指定的所用的字体名。该字符串的长度不得超过32个字符,如果lfFaceName为NULL,图形设备接口将使用默认的字体名。

BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE
nPitchAndFamily, LPCTSTR lpszFacename );

参数说明:
nHeight :字体高度.>0:字体的高度值;=0:字体采用缺省直.<0:此值的绝对值为高度.
nWidth :字体宽度.
nEscapement :文本行的倾斜度.
nOrientation :字符基线的倾斜度.
nWeight :字体的粗细.如下:
.FW_DONTCARE
.FW_THIN
.FW_EXTRALIGHT
…..
bItalic :字体是否为斜体
bUnderline :字体是否带下划线
cStrikeOut :字体是否带删除线
nCharSet :字体的字符集
.ANSI_CHARSET
.DEFAULT_CHARSET
.SYMBOL_CHARSET
……
nOutPrecision :字符的输出精度
nClipPrecision :字符裁剪的精度
nQuality :字符的输出质量
nPitchAndFamily :字符间距和字体族(低位说明间距,高位说明字符族)
lpszFacename :字体名称

设置HDC的字体

首先,我们需要用CreateFont函数来设置一个HFONT句柄,然后把此句柄设置给我们需要的HDC.下面是CreateFont函数原形.

HFONT CreateFont(
int nHeight, //字体的高度
int nWidth, //字体的宽度
int nEscapement, //字体显示的角度
int nOrientation, //字体的角度
int nWeight, //字体的磅数
BYTE bItalic, //斜体字体
BYTE bUnderline, //带下划线的字体
BYTE cStrikeOut, //带删除线的字体
BYTE nCharSet, //所需的字符集
BYTE nOutPrecision, //输出的精度
BYTE nClipPrecision, //裁减的精度
BYTE nQuality, //逻辑字体与输出设备的实际
//字体之间的精度
BYTE nPitchAndFamily, //字体间距和字体集
LPCTSTR lpszFacename //字体名称
);

示例:

/**************************************************************/
HFONT hFont;
HDC hDC;
hFont=CreateFont(10,10,0,0,FW_THIN,true,false,false,
CHINESEBIG5_CHARSET,OUT_CHARACTER_PRECIS,
CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,
FF_MODERN,”宋体”);
SelectObject(hDC,hFont);
/**************************************************************/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值