字体由CFont类进行管理,创建CFont类必须使用CFont类的成员函数,这点与CPen和CBrush有所不同。
为了使用CFont对象,首先构造一个CFont对象,再通过调用CreateFont、CreateFontIndirect、CreatePointFont、CreatePointFontIndirect使一个Windows字体与此CFont对象关联,然后使用此CFont对象的成员函数就可以操作字体了。字体对象初始化及操作完成后利用CDC::SelectObject()函数将该字体选入到当前设备描述表中即可使用。CDC::SelectObject()函数会返回旧的GDI对象,故使用完毕后可以利用其恢复原来的字体样式。
一般使用CreatePointFont或CreatePointFontIndirect比使用CreateFont或CreateFontIndirect要更简便,因为前两者会自动的把字体高度的单位由点转换为逻辑单位。
注:“点”是传统计量字大小的单位,是从英文Point来的,一般用小写p表示,俗称“磅”。其换算关系为:1p=0.35146mm≈0.35mm,1英寸=72p。
在绘图时还经常会提到逻辑和物理,例如逻辑单位、物理单位,通俗点说,逻辑的就是与具体设备无关的,甚至我们可以自定义,物理的就是由具体设备决定的了。
各种字体字样可以在”VC-工具-选项-字体和颜色“中进行预览。
BOOL CreateFont(
#define CREATE_FONT(nHeignt,sName) CreateFont(\
nHeignt, \
0, \
0, \
0, \
FW_NORMAL, \
FALSE, \
FALSE, \
0, \
DEFAULT_CHARSET, \
OUT_DEFAULT_PRECIS, \
CLIP_DEFAULT_PRECIS, \
CLEARTYPE_QUALITY, \
DEFAULT_PITCH | FF_SWISS, \
sName \
)
......
CPaintDC dc(this);
static CFont font;
font.CREATE_FONT(20, _T("宋体"));
dc.SelectObject(&font);
CString strGrade(_T("hello world"));
dc.TextOut(0,50,strGrade);
2、BOOL CreateFontIndirect(const LOGFONT* lpLogFont);
通过一个LOGFONT结构体变量给出的特征来初始化CFont对象。参数lpLogFont是指向LOGFONT结构体变量的指针,此LOGFONT结构体变定义了逻辑字体的特征。LOGFONT结构体的定义可以参见VS2010/MFC编程入门之十八(对话框:字体对话框)。
3、BOOL CreatePointFont(int nPointSize,LPCTSTR lpszFaceName,CDC* pDC = NULL);
此函数提供了一种由指定字样和点数创建字体的简单方式。参数的意义如下:
nPointSize:指定字体高度,以十分之一点为单位。例如,nPointSize为120则表示是12点的字体。
lpszFacename:指定字体的字样名的字符串。此字符串的长度不应超过30个字符。Windows函数EnumFontFamilies可以枚举出当前所有可用字体的字样名。如果lpszFacename为NULL,则GDI使用一种与设备无关的字体。
pDC:指向CDC对象,用来将nPointSize指定的高度转换为逻辑单位,如果为NULL,则使用屏幕设备上下文进行转换。
eg:
CPaintDC dc(this);
CFont fontGrade;
fontGrade.CreatePointFont(100, L"宋体");
dc.SelectObject(&fontGrade);
CString strGrade(_T("hello world"));
dc.TextOut(0,50,strGrade);
4、BOOL CreatePointFontIndirect(const LOGFONT* lpLogFont,CDC* pDC = NULL);
此函数是通过指定的字样和点数创建字体的间接方式。参数lpLogFont指向一个LOGFONT结构体变量,此LOGFONT变量定义了逻辑字体的特征,它的lfHeight成员以十分之一点为单位,而不是逻辑单位。参数pDC指向CDC对象,用来将lfHeight表示的高度转换为逻辑单位,如果为NULL,则使用屏幕设备上下文进行转换。此函数与CreateFontIndirect很相似,但区别是LOGFONT变量中lfHeight成员的单位是十分之一点而不是逻辑单位。
5、int GetLogFont(LOGFONT * pLogFont);
获取CFont对象的LOGFONT结构体的拷贝。参数pLogFont指向用来接收字体信息的LOGFONT结构体变量
原文地址:http://baike.baidu.com/link?url=U3LC37M7arLFTm3aUafxOLLQ_S0RYtdhHBnKxIWU5UxuWQGan8uktCsOFT5LOK7_aCTpdgeQXcWysQ-ZDTwiHa