前言
MFC 了解一个控件的使用我们只需了解三样东西!
- 属性
- 方法
- 事件
我以基础的组合框和列表框的使用来打开学习控件的大门
组合框
官方文档
组合框十分常见,如下图,这就是组合框来实现的。组合框我理解的就是编辑框和列表框的组合
属性
我们新建一个组合框,看看他有啥属性。
一些基本的属性(可见哇,id哇),就不在赘述了,我们这里学习几个关键。
- Type:
组合框有三个样式
类型 | 何时显示列表框 | 静态控件或编辑控件 |
---|---|---|
简单 | 无法放下 | 编辑 |
Drop-down | 放下时 | 编辑 |
下拉列表 | 放下时 | 静态 |
这里我们经常使用下拉式列表,此时内容是无法编辑的,也就是所谓的静态的。
- data:
data指这里面的数据,我们可以在这里填入默认的数据,但是要分号;
隔开
越行勤;yingwiki.top;心梦莹;
实现效果如下,样式是下拉列表
- sort
这个属性当初坑死我了,他会帮你把数据排序(数组的话从小到大,字符就是字典顺序,当然这些排序的依据可以改,有对应的函数),默认是true,不需要的话要改掉!
事件
组合框被操作时会向父窗口发送通知消息,这些常用通知消息及其含义如下:
- CBN_DBLCLK 鼠标双击
- CBN_DROPDOWN 列表框被弹出
- CBN_KILLFOCUS / ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生
- CBN_SELCHANGE 列表框中选择的行发生改变
- ON_CBN_EDITUPDATE 输入框中内容被更新
主要方法
- int GetCount( ) const;
获取组合框控件的列表框中列表项的数量。 - int GetCurSel( ) const;
获取组合框控件的列表框中选中项的索引,如果没有选中任何项,该函数返回CB_ERR。 - int SetCurSel(int nSelect);
在组合框控件的列表框中选择某项。nSelect参数指定了要选择的列表项的索引,如果为-1则列表框中当前选择项被取消选中,编辑框也被清空。 - DWORD GetEditSel( ) const;
获取组合框控件的编辑框中当前选择范围的起始和终止字符的位置。该函数返回一个32位数,低16位存放起始位置,高16位存放选择范围后第一个非选择字符的位置。如果该函数用于下拉列表式组合框时,会返回CB_ERR。 - int AddString(LPCTSTR lpszString);
为组合框控件中的列表框添加新的列表项。lpszString参数是指向要添加的字符串的指针。该函数的返回值如果大于等于0,那么它就是新列表项的索引,而如果有错误发生则会返回CB_ERR,如果没有足够的内存存放新字符串则返回CB_ERRSPACE。 - int DeleteString(UINT nIndex);
删除组合框中某指定位置的列表项。nIndex参数指定了要删除的列表项的索引。该函数的返回值如果大于等于0,那么它就是组合框中剩余列表项的数量。如果nIndex指定的索引超出了列表项的数量则返回CB_ERR。 - int InsertString(int nIndex,LPCTSTR lpszString);
向组合框控件的列表框中插入一个列表项。nIndex参数指定了要插入列表项的位置,lpszString参数则指定了要插入的字符串。该函数返回字符串被插入的位置,如果有错误发生则会返回CB_ERR,如果没有足够的内存存放新字符串则返回CB_ERRSPACE。 - int SelectString(int nStartAfter,LPCTSTR lpszString);
在组合框控件的列表框中查找一个字符串,如果查找到则选中它,并将其显示到编辑框中。参数同FindString。如果字符串被查找到则返回此列表项的索引,如果查找失败则返回CB_ERR,并且当前选择项不改变。
实践
说了那么多我们就具体实践一下吧
添加项目
- 方法1
直接修改data属性 - 方法2
添加使用类向导添加一个空间成员,调用addstring 方法
添加的控件成员是和我们实际现实的控件关联的,靠的是DoDataExchange(CDataExchange* pDX)函数,如果不了解的话可以查阅钱,前面的文章--类向导在帮你做什么
然后我们在通过这个对象带控制组合框
我们以写到初始化对话框的函数里面,插入一个选项为例子
。
获取所选的序号
我们要知道用户所选的选项,我们只需要调用前面介绍的GetCurSel就好了。
注意!
我们添加变量的时候可以添加两个变量,一个是控件变量一个是数据变量,不建议两个同时都加,这样容易出错。所以我们有另一种方法去控制组合框。
获取控件指针 GetDlgItem()
例如我们要获取组合框的指针
CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_CMB);
CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO1);
pComboBox->InsertString(3,L"我爱你");//差入一个选项
int n= pComboBox->GetCurSel();//获取序号
看,和前面的方法实现的效果是一样的。
组合框介绍结束
其他的方法自己融合一下就好了。
列表框
其实我应该先介绍列表框的,组合框就是列表框和编辑框的组合,所以我这里就不在详细介绍了,可以查阅官方文档。
结语
没有结语就是最好的结语