您的位置:首页 > 其它

动态设置编辑框的大小、 文本字体、颜色等

2012-04-13 18:13 363 查看
完成目标:画图程序中,输出文本后,在对文本进行编辑修改时,需要显示其先前的字体状态,颜色。

完成办法:在画图程序中,自己设置了对文本框的编辑,当然使用的是对CEdit的操作。那么在修改时,只需将保存的这个文本的信息,在编辑框中重现:

问题主要表现在“:1)编辑框的大小,2)编辑框中字体的大小 ;其实一直纠缠在了 编辑框中无法显示文本的字体状态!

1)获得编辑框的大小

因为之前存储了文本的字体样式:LOGFONT ,

CFont *font = new CFont;

font->CreateFontIndirect(&(((CText*)m_mapNodeSelected[0])->m_fontStyle));

CFont *oldFont = lDC->SelectObject(font);

//获得某一种字体下字符串的长和宽

CSize m_size = lDC->GetTextExtent(CDataConvert::TcharToString(((CText *)m_mapNodeSelected[0])->textStr)); //textStr 只是存储了当前的内容

rc.right = ((CText*)m_mapNodeSelected[0])->m_xStart +m_size.cx;

rc.bottom = ((CText*)m_mapNodeSelected[0])->m_yStart + m_size.cy;

pView->m_curPoint.x = ((CText*)m_mapNodeSelected[0])->m_xStart;

pView->m_curPoint.y = ((CText*)m_mapNodeSelected[0])->m_yStart;

pView->m_edit.MoveWindow(&rc);

2)有话说的部分:也就是设置编辑框中的字体

按照网络上很多人说的 直接用:

CFont font ;

font.CreatePointFont(300,_T("宋体"),0);

pView->m_edit.SetFont(&font);

其实这么简单的说也是正确的,但是好像有使用范围吧,因为我单独建了项目还是不好使,然后就查啊查,看了有一个朋友用指针来声明的font,就可以完成。

后来知道了,声明的这个font的生命周期要和m_edit的一致。

那么在单独程序中我可以不设置为指针,而用成员 变量 CFont font;

if(dlg.DoModal() == IDOK)

{

LOGFONT l;

dlg.GetCurrentFont(&l);

if(font.GetSafeHandle() != NULL) //判断是否已经创建

font.DeleteObject(); //删除

font.CreateFontIndirect(&l);

m_edit.SetFont(&font);

m_edit.SetWindowText(_T("nihao"));

}

这样也是可以的。应该是只要生命周期一致就可以吧。

之所以要这么想,是由于如果多次修改时,那么会有很多的font指针,而且在我的程序中删除起来麻烦,因此不如只建立一个font 。

这样CFont 当这个类销毁的时候才销毁。

这是对一个应用程序返工后,又发现了这个。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: