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

本文探讨了在画图程序中实现文本编辑时保留并显示原有字体状态和颜色的方法,包括获取编辑框大小、设置字体及生命周期管理等关键步骤。

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

完成办法:在画图程序中,自己设置了对文本框的编辑,当然使用的是对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  当这个类销毁的时候才销毁。

这是对一个应用程序返工后,又发现了这个。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值