VC++的列表框与组合框
列表框是窗口类名为"ListBox"的预定义子窗口,在窗口矩形内包含有一些可以滚动显示的栏状字符串列表。标准的列表框只能允许选中一个条目,选中的条目将以系统颜色COLOR_HIGHLIGHT高亮显示。Windows还提供了多种不同风格的标准列表框,其中包括多选列表框、多列显示的列表框和可以显示图象的拥有者画(Owner-draw)列表框等。另一种与列表框相关的控件是组合框,该控件预定义类名为"COMBOBOX",实际是一个编辑控件同一个彼此相关的列表框控件的组合。用户既可以在组合框的编辑栏上直接输入、编辑文字也可以从下拉列表中显示的可能选择中进行选取。
MFC的CListBox 类封装了列表框控件,由成员函数Create()完成对列表框的创建,在创建的同时指定了控件的窗口风格。当列表框中的条目被选中或被鼠标双击后将向父窗口发送WM_COMMAND消息。如果列表框采用了LBS_NOTIFY风格,父窗口就可以通过ON_LBN消息映射宏直接将通知消息同消息处理函数建立起映射关系。列表框提供了十余种窗口风格,现将列表框风格及说明列表如下:
缺省的,列表框在每添加或删除一个条目后都会自动重绘,如果在列表框中已经有了几百条甚至上千条条目,将会因为重绘而引起比较严重的闪烁。可以通过使用LBS_NOREDRAW风格来禁止列表框的自动重绘。在需要更新显示时强制重绘列表框窗口即可。如果在创建时未使用LBS_NOREDRAW风格,可以在增删条目前向列表框发送WM_SETREDRAW消息,指定其不重绘,增添完毕后再次发送WM_SETREDRAW消息重新启用自动重绘风格。示例过程如下:
列表框创建之初是不含任何条目的,通过CListBox成员函数AddString()和InsertString()向列表框增添或插入条目。如果列表框具有LBS_SORT风格,那么新添加字串的位置是不固定的,要根据字串的字母进行排序;如果不具有该风格,新字串将添加到列表框的末尾。
MFC的CListBox 类封装了列表框控件,由成员函数Create()完成对列表框的创建,在创建的同时指定了控件的窗口风格。当列表框中的条目被选中或被鼠标双击后将向父窗口发送WM_COMMAND消息。如果列表框采用了LBS_NOTIFY风格,父窗口就可以通过ON_LBN消息映射宏直接将通知消息同消息处理函数建立起映射关系。列表框提供了十余种窗口风格,现将列表框风格及说明列表如下:
| 列表框风格 | 说明 |
| LBS_STANDARD | 创建一个具有边界和垂直滚动条、当选择发生变化或条目被双击时能够通知父窗口的标准列表框。所有条目按字母排序。 |
| LBS_SORT | 按字母排序。 |
| LBS_NOSEL | 条目可视但不可选。 |
| LBS_NOTIFY | 当用户选择或双击一个串时,发出消息通知父窗口。 |
| LBS_DISABLENOSCROLL | 在条目不多时依然显示并不起作用的滚动条。 |
| LBS_MULTIPLESEL | 允许条目多选。 |
| LBS_EXTENDEDSEL | 可用SHIFT和鼠标或指定键组合来选择多个条目。 |
| LBS_MULTICOLUMN | 允许多列显示。 |
| LBS_OWNERDRAWVARIABLE | 创建一个拥有者画列表框,条目高度可以不同。 |
| LBS_OWNERDRAWFIXED | 创建一个具有相同条目高度的拥有者画列表框。 |
| LBS_USETABSTOPS | 允许使用TAB制表符。 |
| LBS_NOREDRAW | 当条目被增删后不自动更新列表显示。 |
| LBS_HASSTRINGS | 记忆了添加到列表中的字串。 |
| LBS_WANTKEYBOARDINPUT | 当有键按下时向父窗口发送WM_VKEYTOITEM或WM_CHARTOITEM消息。 |
| LBS_NOINTEGRALHEIGHT | 按程序设定尺寸创建列表框。 |
缺省的,列表框在每添加或删除一个条目后都会自动重绘,如果在列表框中已经有了几百条甚至上千条条目,将会因为重绘而引起比较严重的闪烁。可以通过使用LBS_NOREDRAW风格来禁止列表框的自动重绘。在需要更新显示时强制重绘列表框窗口即可。如果在创建时未使用LBS_NOREDRAW风格,可以在增删条目前向列表框发送WM_SETREDRAW消息,指定其不重绘,增添完毕后再次发送WM_SETREDRAW消息重新启用自动重绘风格。示例过程如下:
| CListBox m_ctrListBox; // 禁止自动重绘 m_ctrListBox.SendMessage(WM_SETREDRAW, FALSE, 0); // 进行条目增删操作 …… // 允许自动重绘 m_ctrListBox.SendMessage(WM_SETREDRAW, TRUE, 0); |
列表框创建之初是不含任何条目的,通过CListBox成员函数AddString()和InsertString()向列表框增添或插入条目。如果列表框具有LBS_SORT风格,那么新添加字串的位置是不固定的,要根据字串的字母进行排序;如果不具有该风格,新字串将添加到列表框的末尾。
| 对本文中的事件或人物打分: | |
| 当前平均分:-0.28 (78次打分) | |
| 对本篇资讯内容的质量打分: | |
| 当前平均分:-0.58 (69次打分) | |
- [感动最多的] apache无法启动,提示the requested operatio
- [路过最多的] QQ协议分析之TCPF包数据分析
- [高兴最多的] 基于内核的rookit经验
- [难过最多的] 浏览器劫持的攻与防
- [搞笑最多的] 什么是恶意软件详解
- [愤怒最多的] 系统常规急救之系统文件的恢复
- [无聊最多的] 简单有效的防制垃圾引用(第1版)
- [同情最多的] 解决无线网卡配置信息无法保存问题
查看全部回复【已有0位网友发表了看法】


