我需要创建一个指定像素高度的字体,应该用CreatePointFont还是CreateFont呢??
事实证明要用 CreateFont 更合适。
因为我用 CreatePointFont 创建完毕后,在使用时获取到得字高和我设置的是不一致的。
当然,也可能是我对 CreatePointFont 的用法了解的不够透彻。
不管怎么说吧 ,还是 CreateFont 更简单直白一些。
CreateFont
该函数创建一种有特殊性的逻辑字体,此逻辑字体可以在后面被任何设备选择。 使用完毕需要DeleteObiect 。
函数原型:HFONT CreateFont(
int nHeight, // logical height of font
int nWidth, // logical average character width
int nEscapement, // angle of escapement
int nOrientation, // base-line orientation angle
int fnWeight, // font weight
DWORD fdwItalic, // italic attribute flag
DWORD fdwUnderline, // underline attribute flag
DWORD fdwStrikeOut, // strikeout attribute flag
DWORD fdwCharSet, // character set identifier
DWORD fdwOutputPrecision, // output precision
DWORD fdwClipPrecision, // clipping precision
DWORD fdwQuality, // output quality
DWORD fdwPitchAndFamily, // pitch and family
LPCTSTR lpszFace // pointer to typeface name string
);
参数:
cHeight是字体的高度。
cWidth是字体的宽度。
cEscapement是字体的倾斜角。
cOrientation是字体的倾斜角。
cWeight是字体的粗细。
bItalic是字体是否斜体。
bUnderline是字体是否有下划线。
bStrikeOut是字体是否有删除线。
iCharSet是字体使用的字符集。
iOutPrecision是指定如何选择合适的字体。
iClipPrecision是用来确定裁剪的精度。
iQuality是怎么样跟选择的字体相符合。
iPitchAndFamily是间距标志和属性标志。
pszFaceName是字体的名称。
例子:
CFont font;
font.CreateFont(
12,//nHeight
0,//nWidth
0,//nEscapement
0,//nOrientation
FW_NORMAL,//nWeight
FALSE,//bItalic
FALSE,//bUnderline
0,//cStrikeOut
ANSI_CHARSET,//nCharSet
OUT_DEFAULT_PRECIS,//nOutPrecision
CLIP_DEFAULT_PRECIS,//nClipPrecision
DEFAULT_QUALITY,//nQuality
DEFAULT_PITCH |FF_SWISS, //nPitchAndFamily
_T("Arial"));//lpszFacename
//Do something with the font just created...
CClientDC dc(this);
CFont* def_font = dc.SelectObject(&font);
dc.TextOut(5, 5, _T("Hello"),5);
dc.SelectObject(def_font);
//Done with the font. Delete the fontobject.
font.DeleteObject();
CreatePointFont
这个函数提供了一种简单的方法来创建指定字体类型和字体大小 。
函数原型:
BOOL CreatePointFont(
int nPointSize,
LPCTSTR lpszFaceName,
CDC* pDC = NULL
);
参数:
nPointSize
请求的字体的大小 。单位是磅的10倍 。
磅和像素的关系:
国外字体的大小一般是用磅表示,也就是PointSize的单位,1英寸=72磅, (Microsoft WORD中指定字体的大小就是磅单位的)
在实际应用中我们通常使用逻辑点,即象素点数目作为尺寸创建字体,比如用函数CreateFont。或者像LOGFONT中lfHeight和lfWidth,
一般显示器上72磅的字在显示器上高度lfHeight是96个象素点,你输入参数100,表示需要10磅的字体,系统找到最匹配的大约就是10几个象素点的字体(96*10/72)。
lpszFaceName
一个CSTring或者一个指向null-terminated(以空为结尾的)字符串指针来标注字体名称。长度不得超过30个字母。函数EnumFontFamilies可列举能够使用的字体。如果lpszFaceName是NULL,那么GDIuses a device-independent typeface.
pDC
指向CDC对象的指针,用来将字体大小转化为逻辑单位,如果是NULL,那么就根据屏幕当前的上下文(context)来转化
返回值
非零为成功,否则失败