动态设置编辑框的大小、 文本字体、颜色等
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 当这个类销毁的时候才销毁。
这是对一个应用程序返工后,又发现了这个。
完成办法:在画图程序中,自己设置了对文本框的编辑,当然使用的是对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 当这个类销毁的时候才销毁。
这是对一个应用程序返工后,又发现了这个。
相关文章推荐
- \t\t在textarea里面插入图片,修改字体大小和颜色(文本富编辑)
- TextView中各个部分的文本来设置字体,大小,颜色,样式
- 在textarea里面插入图片,修改字体大小和颜色(文本富编辑)接上一篇
- \t\t在textarea里面插入图片,修改字体大小和颜色(文本富编辑)接上一篇
- 苹果开发 笔记(60)文本字体、大小 、颜色、边框 设置
- <P>段落标签</p>设置字体和大小,颜色以及与<font>文本标签</font>
- swift---不同字体大小不同颜色label富文本设置
- <P>段落标签</p>设置字体和大小,颜色以及与<font>文本标签</font>
- MFC设置文本字体大小颜色
- iOS 富文本~设置字体大小和颜色
- 设置导航栏背景颜色及文本字体大小
- WebView设置文本内容字体的大小以及颜色
- MFC——设置静态文本 大小 字体格式 颜色
- MFC静态文本控件如何设置字体--大小和颜色及背景色
- SpannableStringBuilder为文本设置不同字体大小,颜色
- MFC操作——设置静态文本 大小 字体格式 颜色
- c#.net 文本编辑控件——设置RichTextBox的字体和字体大小
- intelliJ IDEA (JetBrains PyCharm)中 3个地方设置字体大小,文本编辑的字体大小,界面字体大小,显示log的字体大小
- andorid,动态设置TextView文本中字体的颜色和格式,用Html.fromHtml方法
- 【AS3代码】设置动态文本格式(颜色,大小等等)