CListBox类控件的使用
(一) CListBox类控件介绍
对于要从若干数据项中进行选择的场合,一个方便的方法是使用列表框。列表框是一个矩形窗口,
在矩形窗口中包含一些列表字符串或其他的数据元素。列表框通常出现在对话框里,如用列表框选择文
件名、目录等。列表框有一个预定义的键盘接口,用户可以用键盘上的箭头或PageUp及PageDown键在列
表框中进行数据的选择,或通过适当的样式设置与Shift或Ctrl键组合使用。
列表框包括两种样式—单选列表框和多选列表框。单选列表框只允许用户一次选择一个选项,而多
选列表框则可以一次选择多个选项。列表框可以自带滚动条,数据项可按排序后的顺序显示,使用己排
序的列表框时,用户很容易在大量选项中搜索并作出选择。
列表框控件属性的Styles标签的具体属性设置如下:
1.Selection
设置列表框中选项的选中方式。有4个选项一Single,表示在给定的选项电至多有一个被选中:
Multiple,表示可以有多个选项被选中,但忽略Shift键和Ctrl键;Extended,允许选择多个选项,在选
择时,可以使用Shift和Ctrl键:None,不允许选择任何选项。
2. Owner draw
设置列表框将由列表框所有者来绘制,在大多数情况下,该选项设置为No.
3. Sort
设置列表框内容应按字母顺序排序,该选项通常被选中。
4. Multi-column
创建一个多列列表框,该选项通常未选中。
5. Use tapstops
设置列表框中显示的文本选项可以包含标签页,该选项通常未选中。
6. Want key input
设置列表框有输入焦点,当按键时列表框所有者收到WM_VKEYTOITEM或WM_CHARTOITEM消息。该选项
通常未选中。
7. Disable no scroll
即使不需要,也显示一个垂直滚动条。该选项通常未选中。
CListBox类的通用方法用来获得和设置列表框数据的值和属性,所有的ClistBox控件都有这些方法,包
括单选列表框、多选列表框和自绘列表框等。
CListBox类通用方法包括:
GetCount() 获得列表框中列表项数目
Geforiwntafxtent( ) 获得列表框的水平滚动宽度(以像素为单位)
GetItemData() 获得与某列表框项有关的32位值
GetITermDataPtr() 获得指向列表框项的指针
GetItemHeight( ) 获得列表框中项的高度
GetItemRect() 获得列表框项边界矩形
GetLocale() 获得列表框的位置标识(LCID)
GetSel() 获得列表框项的选中状态
GetText() 把列表框中字符串复制到缓冲区
GetTextLen() 返回列表框字符串的长度(单位:字节)
GetTopIndex() 获得列表框中第一个可见项的下标(由0开始)
ItemFrompoint()确定和返回离某点最近的列表框项的下标
SetColumnWidth()设置多列列表框的列宽度
SetHotizontalExtent()设置列表框的水平滚动宽度(单位:像素)
SetItemData()设置与一个列表框项有关的32位值
SetDataPtr()设置一个列表框项的指针
SetltemHeight()设置列表框中项的高度
SetLocale( )设置列表框的位置标识(LCID )
SetTabStops()设置列表框的制表位(Tab-Stop)位置
SetTopIndex()设置列表框中第一个可见项的下标(由0开始)
使用列表框之前,需要预先准各好列表框中的数据选择项,在对话框的运行过程中还允许对选择项
执行增加和删除操作,CListBox类提供了操作字符串的一套方法,CListBox类用于操作列表框中字符串
的方法如下:
AddString( ) 在列表框中加入一个字符串
DeleteString( ) 从列表框中删除一个字符串
Dir() 从当前目录加文件名放入列表框
FindString( ) 在列表框中搜索一个字符串
FindSIringEacact() 在列表框中搜索第一个与指定字符串匹配的字符串
InsertStting( ) 在列表框指定下标处插入一个字符串
ResetContent() 清除列表框中的所有项
SelectString() 在单选列表框中搜索并选择一个字符串
CListBox类还声明了几个虚函数:
CharToItem() 可以重载此方法来为自绘列表框(没有字符串)处理WM-CHAR消息
CompareItem() 由MFC调用以得到排序后的自绘列表框中的新项的位置
DeleteItem( ) 当用户从自绘列表框中删除一项时,MFC调用此方法
DrawItem() 当确定自绘列表框项必须重绘时,MFC调用此方法
MeasureItem( ) 创建自绘列表框时MFC调用此方法来决定列表框的维数
VKeyToItem( ) 用户可重载此方法,来处理具有LBS_WANTKEYBOARDINPUT样式的列表框的WM_ KEYDOWN消
息
与列表框相关的消息
LBN_ DBLCLK当双击某列表框选项时发送。
LBN_ERRSPACE因为内存不够,一个操作不能执行时发送。
LBN_ KILLFOCUS当列表框失去输入焦点时发送。
LBN_ SELCANCEL当用户取消某列表框选择时发送。
LBN_ SELCHANGE当列表框中的选择状态改变时发送
LBN_ SETFOCUS当列表框得到输入焦点时发送。
上面的消息都用LBN_作前缀。如果要发送这些消息,列表框必须在Properties对话框里选中Notify
复选框。LBN_DBLCLK消息是最常用的消息,大多数用户希望双击列表框选项时执行某种默认的操作。例
如,显示文件名列表时,希望双击某文件名可以打开该文件进行编辑。
(二)单选列表框
列表框的默认模式是单选项模式,在这种模式下,用户每次只能从列表框中选中一个选项。对列表
框的操作围绕着选择项进行,包括选择项的装载、删除、设置选中状态及获得选中状态。
列表框是按数组方式来组织选择项的,每一个选择项包含一个下标值和显示值。下标值从0开始:
显示值是一个CString型的字符串。属性Sort的设置与对选择项的操作密切相关。
CListBox类提供了两个函数装载选择项,即CListBox::AddString(LPCTSTR LpszItem)和
CListBox::InsertString(int nlndex, LPCTSTR Lpszltem)。当选中Sort属性时,AddString按字符串
排序顺序插入新的选择项,当未选中Sort属性时,AddString在选择项序列的最后插入一个新的选择项
。InsertString操作不受Sort属性的影响,在指定下标位置插入新的选择项,其他选择项后移一位。
当未选中Sort属性时,使用ClassWizard可在对话框类为列表框控件关联两种类型的值成员变量,
CString类型的值成员变量表示选择项的显示值,int类型的值成员变量表示选择项的下标值。当选中
Sort属性时,只能关联一个CString类型的值成员变量。所关联的值成员变量的数据类型不同,决定着
在初始化时进行选中操作的方法也不同。
当关联的是int型的值成员变量,可以使用CListBox::SetCurSel(int nSelect)来设置列表框的初
始选中状态。如果关联的是CString型的值成员变量,就要使用CListBox::SelectString
(intnStartAfter,LPCTSTR LpszItem)函数,从nStartAfter指定的下标位置起查找由LpszItem字符串指
定的选择项,来设置列表框的初始选中状态。
常用的操作还有:CListBox::DeleteString(int nIndex),删除指定下标的选择项,删除后其后的
选择项向前移动一位;CListBox::GetCursel(),返回当前选中的选择项的下标值。
(三)多选列表框
多选列表框扩展了标准的单项选择列表框的能力,可以解决在一个列表框中选择多个选项带来的复
杂性。
对于多选列表框,同样可以关联CStting和int类型的值成员变量,但通过值成员变量传递回来的是
最后一个选中的选项内容,要获得选中的多个选项,需要通过CListBox类提供的多选项操作方法。
为多项选择列表框提供的CListBox类方法如下:
GetAnchorlndex()获得多项选择列表框中当前定位项的下标
GetCaretlndex()获得多项选择列表框中具有光标矩形的项的下标
GetSelCount()获得多项选择列表框中当前所选的项的数目
GetSelItems()将当前所有被选列表框项下标放入一整型数组缓冲区
SelItemRange()切换多选择列表框项范围的选择状态
SetAnchorIndex()在多项选择列表框中扩充选择设置开始(定位)项
SetCaretlndex()在多项选择列表框中指定下标项设置光标矩形
SetSel()在多项选择列表框中设置选项的选择状态