设置字体
函数原型:
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 :字体高度. 三中情况 1、>0:字体的高度值(设备坐标);2、=0:字体采用缺省值. 3、<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 :字体名称
888888888888888*****************************************************************************************
方法一:
步骤一:在Dlg类中增加一个类成员变量:
- CFont m_editFont;
注意:这里Font对象必须是类成员变量,不能是局部变量,否则会出现只改变了光标的大小,而不能改变字体的大小。
步骤二:在OnInitDialog方法中增加下列语句:
- m_editFont.CreatePointFont(180, "宋体");
- m_editPlace.SetFont(&m_editFont); // 设置新字体
方法二:
在OnInitDialog方法中增加下列语句也可以实现:
- CFont* ptf=m_editPlace.GetFont(); // 得到原来的字体
- LOGFONT lf;
- ptf->GetLogFont(&lf);
- lf.lfHeight = 20; // 改变字体高度
- strcpy (lf.lfFaceName, "隶书"); // 改变字体名称
- m_editFont.CreateFontIndirect(&lf);
- m_editPlace.SetFont(&m_editFont); // 设置新字体
注意:If是个新的结构体变量,GetLogFont函数是实现将ptf中的LOGFONT结构体变量拷贝给If了,所以改变If不等于是改变ptf中的LOGFONT变量。所以下面必须加这两句来创建新的字体对象
m_editFont.CreateFontIndirect(&lf);
m_editPlace.SetFont(&m_editFont); // 设置新字体
MFC内 CFont ,要修改成功,CFont的对象 的销毁不能早于对话框的销毁。
一直以为是我的程序编码问题?然而问题却不是出现在那,又花了很长时间的跟踪,最后发现问题居然出现在CListCtr组件上,倒。
在 InsertItem(n, csText, nIndex); 这句话中设置了断点,发现csText 明明是中文,偏偏插进去显示出来却是乱码,网上查了资料,有人说这是资源设置成英文的原因,于是工程的资源设置成中文,然而,问题却没有解决,还是乱码,把我气得个半死。
又找了很多“网文野史”,终于有人说要设置一下对话框字体才会显示正常,于是,抱着死马当活马医的态度去试试,没想到最后却成功。靠,害我白白搞了一天半。很痛苦,现在写下来,如果有碰到和我一样的人能少走弯路。
我的程序是继承CListCtrl 这个组件的。于是我在其初始化中插入下面这几行:
//组件中文乱码是因为没有设置字体//
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = 18;
strcpy(lf.lfFaceName, "宋体");
HFONT hfont = ::CreateFontIndirect(&lf);
CFont* font = CFont::FromHandle(hfont);
SetFont(font);
重新编译一下,过去了。吐血!
搞不懂为什么程序会有这种很偏的疑难问题。