CListBox自动换行显示
需要在ListBox控件中显示一些信息。
为方便查看,不使用水平滚动条。当要输出的字符串占用的宽度超过ListBox的宽度时,截断字符串,剩余的在下一行显示。
1. 计算ListBox所占的宽度,用GetClientRect。
GetClientRect返回的是客户区的大小。当ListBox中有垂直滚动条时,那么客户区的大小会相应调整。GetClientRect返回的是去掉滚动条占用区域后剩余的区域,即完全用来显示内容的区域的大小。
2. 计算字符串占用的宽度,用GetTextExtent方法。
一开始计算的不正确,明显比实际占用的值大。
上网查,发现ListBox的ClientDC并没有包含列表框字体信息。也就是说,对话框创建时所使用字体并没有“选入”ClientCD。
要获得字符串真正占用的宽度,应该先调用GetFont获得列表框的字体信息,然后将此字体选入ClientDC中。
例如:
CFont *pFont = m_List1.GetFont();
CDC *pDC = m_List1.GetDC();
CFont *pOldFont = pDC->SelectObject(pFont);
CSize sz = pDC->GetTextExtent(str);
pDC->SelectObject(pOldFont);
3. 源码
void ShowInfo(CListBox *pListBox, CString infoStr)
{
CRect clientRect;
pListBox->GetClientRect(&clientRect);
int maxWidth = clientRect.Width(); int len = infoStr.GetLength(); CFont *pFont = pListBox->GetFont();
CDC *pDC = pListBox->GetDC(); CFont *pOldFont = pDC->SelectObject(pFont); CSize sz = pDC->GetTextExtent(infoStr, len); while(sz.cx > maxWidth)
{
len--;
sz = pDC->GetTextExtent(infoStr, len);
} pDC->SelectObject(pOldFont); pListBox->AddString(infoStr.Left(len)); int strLen = infoStr.GetLength();
if(len != strLen)
{
ShowInfo(pListBox, infoStr.Right(strLen - len));
}
}
CListBox自动换行显示的更多相关文章
- Easyui datagrid 设置内容超过单元格宽度时自动换行显示
datagrid 设置内容超过单元格宽度时自动换行显示 by:授客 QQ:1033553122 测试环境 jquery-easyui-1.5.3 问题描述 单元格内容超过单元格宽度不会自动化换行.如下 ...
- EditText自动换行显示内容
默认的EditText是不会自动换行的,通过代码来实现: [java] view plain copy EditText editText = new EditText(this); //设置Edit ...
- 原生的UITableViewCell高度自适应,textLabel自动换行显示
/* * 设置子项cell **/ - (UITableViewCell *)getChildCell:(UITableView *)tableView and:(NSIndexPath *)inde ...
- QLabel 文本内容自动换行显示
需要把QLabel的WordWrap属性设置成TRUE,可以通过界面设置,也可以通过程序设置
- Echarts-axislabel文字过长导致显示不全或重叠
先看两张图 按目前情况,官方并为对axislabel的高度或者宽度做调整.所以解决方案只能从其他方案下手 解决方案有几种 第一种为上图解决方案 设置grid属性定义图的大小来释放空间,使得axisla ...
- Excel自动换行、Export2Excel 自动换行
1需求:导出excel后自动换行显示. 2插件:Export2Excel 3.测试 listToExcel() { import('@/vendor/Export2Excel').then(excel ...
- shell脚本之颜色效果显示以及PS1颜色实战
在bash shell脚本中我们可以使用ASCII颜色来显示文本信息. 格式:\033\[31m hello \033[0m ##m: 左侧#:这个#可以是3或者4,作用不一样. 3:前景色 4:背景 ...
- inputType导致TextView不能多行显示
今天遇到一个问题很纳闷,那就是TextView不能自动换行多行显示,因为我的印象是TextView默认是可以自动换行多行显示的,今儿个怎么就不行呢. 最终找到原因,是因为设置了inputType属性导 ...
- CSS篇之DIV+CSS布局
<div></div> div与其他标签一样,也是一个XHTML所支持的标签. div是XHTML中指定的,远门用于布局设计的容器标记. 简单的CSS布局 头部 内容 页脚 & ...
随机推荐
- jquery 获取css position的值
jquery 获取css position的值 CreateTime--2018年5月28日14:03:12 Author:Marydon 1.情景展示 <div id="aa&q ...
- Git高速入门——Git安装、创建版本号库以及经常使用命令
学习Git最全面的资料,在我看来是这本书--Pro Git,网上关于Git的教程有非常多,包含当中一些非常优秀的教程.这一系列的博客,主要是记录自己学习Git的经历.以及在这一过程中遇到的一些问题. ...
- iOS-仿智联字符图片验证码
概述 随机字符组成的图片验证码, 字符位数可改变, 字符可斜可正排列. 详细 代码下载:http://www.demodashi.com/demo/10850.html 项目中有时候会有这种需求: 获 ...
- mysql 如何查看sql语句执行时间
查看执行时间 1 show profiles; 2 show variables;查看profiling 是否是on状态: 3 如果是off,则 set profiling = 1: 4 执行自己的s ...
- 【LeetCode】114. Flatten Binary Tree to Linked List
Flatten Binary Tree to Linked List Given a binary tree, flatten it to a linked list in-place. For ex ...
- 卓有成效的团队建设经验与见解 Team Leader你会带团队吗?
http://www.nowamagic.net/librarys/veda/detail/1955前言 这篇文章是写给Team Leader和往这个方向前进的人.也适合一般的程序员,对你们在团队合作 ...
- FFmpeg采集音视频数据命令
文章转自:https://www.jianshu.com/p/4709ccbda3f9 1.ffmpeg 把文件当做直播推送至服务器 (RTMP + FLV) ffmpeg - re -i demo. ...
- tsung 学习
tsung简介: Tsung是开源的基于Erlang语言开发的多协议分布式压力测试工具,它能用来压力测试HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP 和 ...
- dbcp2连接池获取数据库连接Connection
一.先来看看手工创建的方式 public static Connection getConnection() { Connection conn = null; try { Class.forName ...
- C# 获取文件MD5、SHA1
/// <summary> /// 计算文件的 MD5 值 /// </summary> /// <param name="fileName"> ...