目录
1.控件介绍
组合框控件是我们工作中用得很频繁的一个控件,其实就是把一个编辑框和列表框组合在一起。
适用范围:当你有多个同级选项时,你又不想创建很多个单选框按钮,这时,组合框就能帮你完成这个复杂的创建过程。
组合框一共分为三种类型:
1.简易(Simple)组合框
2.下拉式(Dropdown)组合框
3.下拉列表式(Drop List)组合框
很明显,第一种用得最少 ,第二种和第三种用得相较来说比第一种多。
2.控件的消息通知函数
当我们操作组合框控件时,为了响应我们的操作,MFC定义了一些消息响应函数,发送给父窗口来响应我们的操作:比如改变箭头对应索引值等。
下面列举出来
CBN_CLOSEUP:组合框的列表框组件被关闭,简易组合框不会发送该通知消息
CBN_DBLCLK:用户在某列表项上双击鼠标,只有简易组合框才会发送该通知消息
CBN_DROPDOWN:组合框的列表框组件下拉,简易式组合框不会发送该通知消息
CBN_EDITUPDATE:在编辑框准备显示改变了的正文时发送该消息,下拉列表式组合框不会发送该消息
CBN_EDITCHANGE:编辑框的内容被用户改变了,与CBN_EDITUPDATE不同,该消息是在编辑框显示的正文被刷新后才发出的,下拉列表式组合框不会发送该消息
CBN_ERRSPACE:组合框无法申请足够的内存来容纳列表项
CBN_SELENDCANCEL:表明用户的选择应该取消,当用户在列表框中选择了一项,然后又在组合框控件外单击鼠标时就会导致该消息的发送
CBN_SELENDOK:用户选择了一项,然后按了回车键或单击了下滚箭头,该消息表明用户确认了自己所作的选择
CBN_KILLFOCUS:组合框失去了输入焦点
CBN_SELCHANGE:用户通过单击或移动箭头键改变了列表的选择
CBN_SETFOCUS:组合框获得了输入焦点
3.成员函数介绍
1.获取组合框控件的列表框中列表项的数量。
int GetCount( ) const;
2.获取组合框控件的列表框中选中项的索引,如果没有选中任何项,该函数返回CB_ERR。
int GetCurSel( ) const;
3.在组合框控件的列表框中选择某项。nSelect参数指定了要选择的列表项的索引,如果为-1则列表框中当前选择项被取消选中,编辑框也被清空。
int SetCurSel(int nSelect);
4.获取组合框控件的编辑框中当前选择范围的起始和终止字符的位置。该函数返回一个32位数,低16位存放起始位置,高16位存放选择范围后第一个非选择字符的位置。如果该函数用于下拉列表式组合框时,会返回CB_ERR。
DWORD GetEditSel( ) const;
5.用于在组合框控件的编辑框中选择字符。nStartChar参数指定起始位置,nEndChar参数指定终止位置。
BOOL SetEditSel(int nStartChar,int nEndChar);
6.获取组合框中指定项所关联的32位数据。nIndex参数指定组合框控件的列表框某项的索引(从0开始)。
DWORD_PTR GetItemData(int nIndex) const;
7.为某个指定的组合框列表项设置一个关联的32位数。nIndex参数指定要进行设置的列表项索引。dwItemData参数指定要关联的新值。
int SetItemData(int nIndex,DWORD_PTR dwItemData);
8.从组合框控件的列表框中获取某项的字符串。nIndex参数指定要获取字符串的列表项的索引,CString参数用于接收取到的字符串。
void GetLBText(int nIndex,CString& rString) const;
9.获取组合框控件的列表框中某项的字符串长度。nIndex参数指定要获取字符串长度的列表项的索引。
int GetLBTextLen(int nIndex) const;
10.获取组合框控件的列表框中第一个可见项的索引。
int GetTopIndex( ) const;
11.将组合框控件的列表框中某个指定项设置为可见的。nIndex参数指定了该列表项的索引。该函数成功则返回0,有错误发生则返回CB_ERR。
int SetTopIndex(int nIndex);
12.用于限制用户在组合框控件的编辑框中能够输入的最大字节长度。nMaxChars参数指定了用户能够输入文字的最大字节长度,如果为0则长度被限制为65535个字节。
BOOL LimitText(int nMaxChars);
13.为组合框控件中的列表框添加新的列表项。lpszString参数是指向要添加的字符串的指针。该函数的返回值如果大于等于0,那么它就是新列表项的索引,而如果有错误发生则会返回CB_ERR,如果没有足够的内存存放新字符串则返回CB_ERRSPACE。
int AddString(LPCTSTR lpszString);
14.删除组合框中某指定位置的列表项。nIndex参数指定了要删除的列表项的索引。该函数的返回值如果大于等于0,那么它就是组合框中剩余列表项的数量。如果nIndex指定的索引超出了列表项的数量则返回CB_ERR。
int DeleteString(UINT nIndex);
15.在组合框控件的列表框中查找但不选中第一个包含指定前缀的列表项。nStartAfter参数指定了第一个要查找的列表项之前的那个列表项的索引。lpszString指向包含要查找的前缀的字符串。该函数的返回值如果大于等于0,那么它是匹配列表项的索引,如果查找失败则返回CB_ERR。
int FindString(int nStartAfter,LPCTSTR lpszString) const;
16.向组合框控件的列表框中插入一个列表项。nIndex参数指定了要插入列表项的位置,lpszString参数则指定了要插入的字符串。该函数返回字符串被插入的位置,如果有错误发生则会返回CB_ERR,如果没有足够的内存存放新字符串则返回CB_ERRSPACE。
int InsertString(int nIndex,LPCTSTR lpszString);
17.在组合框控件的列表框中查找一个字符串,如果查找到则选中它,并将其显示到编辑框中。参数同FindString。如果字符串被查找到则返回此列表项的索引,如果查找失败则返回CB_ERR,并且当前选择项不改变。
int SelectString(int nStartAfter,LPCTSTR lpszString);