在6.1.8小节的例子中,读者将会看到对列表框的测试.
6.1.7 组合框控件
组合框把一个编辑框和一个单选择列表框结合在了一起.用户既可以在编辑框中输入,也可以从列表框中选择一个列表项来完成输入.如上一章所提到的,组合框分为简易式(Simple)、下拉式(Dropdown)和下拉列表式(Drop List)三种.简易式组合框包含一个编辑框和一个总是显示的列表框。下拉式组合框同简易式组合框类似,二者的区别在于仅当单击下滚箭头后列表框才会弹出。下拉列表式组合框也有一个下拉的列表框,但它的编辑框是只读的,不能输入字符。
Windows中比较常用的是下拉式和下拉列表式组合框,在Developer Studio中就大量使用了这两种组合框.二者都具有占地小的特点,这在界面日益复杂的今天是十分重要的.下拉列表式组合框的功能与列表框类似.下拉式组合框的典型应用是作为记事列表框使用,既把用户在编辑框中敲入的东西存储到列表框组件中,这样当用户要重复同样的输入时,可以从列表框组件中选取而不必在编辑框组件中从新输入.在Developer Studio中的Find对话框中就可以找到一个典型的下拉式组合框.
要设计一个记事列表框,应采取下列原则:
在创建组合框时指定CBS_DROPDOWNLIST风格.
要限制列表项的数目,以防止内存不够.
如果在编辑框中输入的字符串不能与列表框组件中的列表项匹配,那么应该把该字符串插入到列表框中的0位置处.最老的项处于列表的末尾.如果列表项的数目超出了限制,则应把最老的项删除.
如果在编辑框中输入的字符串可以与列表框组件中的某一项完全匹配,则应该先把该项从列表的当前位置删除,然后在将其插入道列表的0位置处.
组合框控件会向父窗口发送表6.12所示的通知消息.
表6.12 组合框控件的通知消息
消息
含义
CBN_CLOSEUP
组合框的列表框组件被关闭.简易式组合框不会发出该消息.
CBN_DBLCLK
用户在某列表项上双击鼠标.只有简易式组合框才会发出该消息.
CBN_DROPDOWN
组合框的列表框组件下拉.简易式组合框不会发出该消息.
CBN_EDITCHANGE
编辑框的内容被用户改变了。与CBN_EDITUPDATE不同,该消息是在编辑框显示的正文被刷新后才发出的。下拉列表式组合框不会发出该消息.
CBN_EDITUPDATE
在编辑框准备显示改变了的正文时发送该消息。下拉列表式组合框不会发出该消息.
CBN_ERRSPACE
组合框无法申请足够的内存来容纳列表项.
CBN_SELENDCANCEL
表明用户的选择应该取消.当用户在列表框中选择了一项,然后又在组合框控件外单击鼠标时就会导致该消息的发送.
CBN_SELENDOK
用户选择了一项,然后按了回车键或单击了下滚箭头.该消息表明用户确认了自己所作的选择.
CBN_KILLFOCUS
组合框失去了输入焦点.
CBN_SELCHANGE
用户通过点击或移动箭头键改变了列表的选择.
CBN_SETFOCUS
组合框获得了输入焦点.
MFC的CComboBox类封装了组合框.需要指出的是,虽然组合框是编辑框和列表框的选择,但是CComboBox类并不是CEdit类和CListBox类的派生类,而是CWnd类的派生类.
CComboBox的成员函数Create负责创建组合框,该函数的说明如下:
BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
参数dwStyle指定了组合框控件的风格,如表6.10所示