如何在设置字体
用CEDITVIEW建立了一个记事本查看程序,我想以fixedsys查看,该怎么办哪
我在CEDITVIEW的构造函数里,写 CreateFont(),再SetFont,就报错
问题点数:40、回复次数:8Top
1 楼howtotell(从何谈起)回复于 2005-05-01 21:48:41 得分 0
放到OnPaint里面如何?Top
2 楼42252343(大跃进的猪)回复于 2005-05-02 00:12:43 得分 0
报什么错 ??Top
3 楼ma100()回复于 2005-05-02 13:11:45 得分 0
CTxtView::CTxtView()
{
m_font->CreateFont(15,8,0,0,400,0,0,0,0,1,2,1,49,"Fixedsys");
SetFont(m_font);
}
//////
m_font 是CEDITVIEW的成员
报该内存不能为readTop
4 楼0011411(爱也许是假的,可是当时的快乐是真的。)回复于 2005-05-02 13:21:44 得分 40
VC的对话框字体设置对所有控件都有效,你不能单独地改变某个静态文本的字体。对于你的问题,需要首先用CreateFont来建立一个字体对象,然后调用控件的SetFont,就可以了。
例子:
1、改静态文体的ID,如:IDC_STATIC1
2、添加一个Edit控件,建立一个关联的控件m_editControl。
3、在OnInitDialog中添加如下代码:
CFont * f;
f = new CFont;
f->CreateFont(16, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_BOLD, // nWeight
TRUE, // 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")); // lpszFac
m_editControl.SetFont(f);
m_editControl.SetWindowText("问专家");
GetDlgItem(IDC_STATIC1)->SetFont(f);
需要注意的是,这里我们使用的是CFont指针,而不是普通的CFont局部变量,如果把程序改成下面这样:
CFont f;
f.CreateFont(16, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_BOLD, // nWeight
TRUE, // 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")); // lpszFac
m_editControl.SetFont(&f);
m_editControl.SetWindowText("问专家");
GetDlgItem(IDC_STATIC1)->SetFont(&f);
运行后就得不到想要的效果了,因为OnInitDialog函数执行完毕,CFont f就会被清除。必须保证SetFont设置的字体对象在对话框关闭前一直有效。所以通常是使用指针或类成员的方式来保存所建立的字体对象。
非MFC程序,首先用CreateFont来建立一个字体句柄,然后再用SendMessage发给控件WM_SETFONT消息,将建立的字体句柄赋值过去,就可以了。
Top
5 楼xianshiqi(日出西山)回复于 2005-05-02 13:39:15 得分 0
创建指针(对象),分配空间,选如内存,释放内存Top
6 楼42252343(大跃进的猪)回复于 2005-05-02 13:40:13 得分 0
m_font->CreateFont(15,8,0,0,400,0,0,0,0,1,2,1,49,"Fixedsys");
你之前没申请内存 应该先 new一下 或不要用指针直接
m_font.CreateFont(15,8,0,0,400,0,0,0,0,1,2,1,49,"Fixedsys");Top
7 楼ma100()回复于 2005-05-02 14:16:41 得分 0
CTxtView::CTxtView()
{
m_font.CreateFont(15,8,0,0,400,0,0,0,0,1,2,1,49,"Fixedsys");
SetFont(&m_font);
}
报debug错误Top
8 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-05-02 14:22:17 得分 0
原因很简单就是:不是视图设置字体,应该是视图中的edit设置字体.(CEDITVIEW其实是view和edit的结合体)
Top




