- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
为列表控件添加水平滚动条
为列表控件添加水平滚动条程序运行效果截图: Win32的标准控件之中,列表控件(ListBox)并没有和列表视图(ListView)一样提供水平滚动条,所以如果列表项的长度超过列表的宽度的话,那么超出的部分将无法显示。在本文中我将以一个简单的例子来说明如何使用SDK来解决这一问题,在这个例子中,我将为一个列表控件添加100行如下格式的文本: This is a very very very very very long sentence - line 1 This is a very very very very very long sentence - line 2 …… 这段添加文本的代码为: case WM_INITDIALOG: int i; ?TCHAR str[100]; ?for i 0; i 100; i++ wsprintf str, This is a very very very very very long sentence - line %d, i + 1 ; ??SendDlgItemMessage hDlg, IDC_LIST, LB_ADDSTRING, 0, LPARAM str ; break; 下面我来为这个列表控件来添加水平滚动条,首先需要在资源的设计中为这个列表控件设置水平滚动条,然后就可以通过向列表控件发送一条LB_SETHORIZONTALEXTENT消息来向它添加水平滚动条了。在这条消息的附加参数中,wParam参数就是以像素为单位的水平滚动条长度,lParam不使用。那么,可以为这个滚动条设置一个足够的长度(假设为500),有以下的代码: case WM_INITDIALOG: HDC hdc; ?int i; ?TCHAR str[100]; ?for i 0; i 100; i++ wsprintf str, This is a very very very very very long sentence - line %d, i + 1 ; ??SendDlgItemMessage hDlg, IDC_LIST, LB_ADDSTRING, 0, LPARAM str ; SendDlgItemMessage hDlg, IDC_LIST, LB_SETHORIZONTALEXTENT, 500, 0 ; // 设置长度为500像素的水平滚动条 break; 如你所见,我们已经成功地为列表控件添加了水平滚动条。然而美中不足的是,500这一长度似乎太长,很不美观。那么我们所需要的,就是一种方法,我们能通过这种方法来将字符串的长度换算成为一个适当的像素长度,这样就可以使这个界面较为美观了。幸运的是,Win32 API之中的确有这么一个函数: BOOL GetTextExtentPoint32 ?HDC hdc, // 相关设备句柄 ?LPCTSTR lpString, // 字符串 ?int cbString, // 字符串的字符数(即长度) ?LPSIZE lpSize // 用来接收字符串的尺寸 ; 也许你会很纳闷:这个函数为什么要和HDC扯上关系?其实原因很简单:Windows是一个基于图形的操作系统,所以所有的文本也是被Windows系统“画”到界面上去的。那么这样一来,字符串的长度自然和所选用的字体和字体的大小发生关系,字符串的像素宽度也必须这么计算了。我的代码如下: case WM_INITDIALOG: HDC hdc; ?SIZE s; ?int i; ?TCHAR str[100]; ?hdc GetDC hDlg ; // 获得相关设备句柄 ?for i 0; i 100; i++ wsprintf str, This is a very very very very very long sentence - line %d, i + 1 ; ??GetTextExtentPoint32 hdc, str, lstrlen str , s ; // 获取字符串的像素大小 ??// 如果新的字符串宽度大于先前的水平滚动条宽度,则重新设置滚动条宽度 ??if s.cx LONG SendDlgItemMessage hDlg, IDC_LIST, LB_GETHORIZONTALEXTENT, 0, 0 SendDlgItemMessage hDlg, IDC_LIST, LB_SETHORIZONTALEXTENT, WPARAM s.cx, 0 ; ??SendDlgItemMessage hDlg, IDC_LIST, LB
您可能关注的文档
最近下载
- 食材配送服务质量保证措施.pdf VIP
- 2025高考全国二卷语文真题试卷+解析及答案.docx VIP
- 气瓶充装安全风险管控清单.docx
- 人教版小学数学新教材培训心得体会.docx VIP
- 2025年广东兴业银行广州分行社会招聘笔试备考试题及答案解析.docx VIP
- 反洗钱法及受益所有人信息管理办法知识测试试卷.docx
- 货币金融学(第十二版)PPT课件(全).pptx VIP
- 2025年浙江省农村发展集团有限公司招聘笔试备考试题及答案解析.docx VIP
- 2025年职业技能大赛(电工赛项)理论考试题库500题(含答案).docx VIP
- 2025年大学英语四级词汇(乱序版).pdf VIP
文档评论(0)