单击鼠标选择一个列表项,单击一个按钮来处理选择的项.
双击鼠标选择一个列表项是处理选择项的快捷方法.
列表框会向父窗口发送如表6.9所示的通知消息.
表6.9 列表框控件的通知消息
消息
含义
LBN_DBLCLK
用户用鼠标双击了一列表项.只有具有LBS_NOTIFY的列表框才能发送该消息.
LBN_ERRSPACE
列表框不能申请足够的动态内存来满足需要.
LBN_KILLFOCUS
列表框失去输入焦点.
LBN_SELCANCEL
当前的选择被取消.只有具有LBS_NOTIFY的列表框才能发送该消息.
LBN_SELCHANGE
单击鼠标选择了一列表项.只有具有LBS_NOTIFY的列表框才能发送该消息.
LBN_SETFOCUS
列表框获得输入焦点.
WM_CHARTOITEM
当列表框收到WM_CHAR消息后,向父窗口发送该消息.只有具有LBS_WANTKEYBOARDINPUT风格的列表框才会发送该消息.
WM_VKEYTOITEM
当列表框收到WM_KEYDOWN消息后,向父窗口发送该消息.只有具有LBS_WANTKEYBOARDINPUT风格的列表框才会发送该消息.
MFC的CListBox类封装了列表框.CListBox类的Create成员函数负责列表框的创建,该函数的声明是
BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
参数dwStyle指定了列表框控件的风格,如表6.10所示,dwStyle可以是这些风格的组合.rect说明了控件的位置和尺寸.pParentWnd指向父窗口,该参数不能为NULL。nID则说明了控件的ID。如果创建成功,该函数返回TRUE,否则返回FALSE.
表6.10 列表框控件的风格
控件风格
含义
LBS_EXTENDEDSEL
支持多重选择.在点击列表项时按住Shift键或Ctrl键即可选择多个 项.
LBS_HASSTRINGS
指定一个含有字符串的自绘式列表框.
LBS_MULTICOLUMN
指定一个水平滚动的多列列表框,通过调用CListBox::SetColumnWidth来设置每列的宽度.
LBS_MULTIPLESEL
支持多重选择.列表项的选择状态随着用户对该项单击或双击鼠标而翻转.
LBS_NOINTEGRALHEIGHT
列表框的尺寸由应用程序而不是Windows指定.通常,Windows指定尺寸会使列表项的某些部分隐藏起来.
LBS_NOREDRAW
当选择发生变化时防止列表框被更新,可发送WM_SETREDRAW来改变该风格.
LBS_NOTIFY
当用户单击或双击鼠标时通知父窗口.
LBS_OWNERDRAWFIXED
指定自绘式列表框,即由父窗口负责绘制列表框的内容,并且列表项有相同的高度.
LBS_OWNERDRAWVARIABLE
指定自绘式列表框,并且列表项有不同的高度.
LBS_SORT
使插入列表框中的项按升序排列.
LBS_STANDARD
相当于指定了WS_BORDER|WS_VSCROLL|LBS_SORT |LBS_NOTIFY.
LBS_USETABSTOPS
使列表框在显示列表项时识别并扩展制表符(‘\t’),缺省的制表宽度是32个对话框单位.
LBS_WANTKEYBOARDINPUT
允许列表框的父窗口接收WM_VKEYTOITEM和WM_CHARTOITEM消息,以响应键盘输入.
LBS_DISABLENOSCROLL
使列表框在不需要滚动时显示一个禁止的垂直滚动条.
除了上表中的风格外,一般还要为列表框控件指定WS_CHILD、WS_VISIBLE、WS_TABSTOP、WS_BORDER和WS_VSCROLL风格.要创建一个普通的单选择列表框,应指定的风格为WS_CHILD|WS_VISIBLE|WS_TABSTOP|LBS_STANDARD.要创建一个多重选择列表框,应该在单选择列表框风格的基础上再加上 LBS_MULTIPLESEL或LBS_ EXTENDEDSEL.如果不希望列表框排序,就不能使用LBS_STANDARD风格.
对于用对话框模板编辑器创建