前言

MFC 了解一个控件的使用我们只需了解三样东西!

  1. 属性
  2. 方法
  3. 事件

我以基础的组合框和列表框的使用来打开学习控件的大门

组合框

官方文档
组合框十分常见,如下图,这就是组合框来实现的。组合框我理解的就是编辑框和列表框的组合
image.png

属性

我们新建一个组合框,看看他有啥属性。
image.png
一些基本的属性(可见哇,id哇),就不在赘述了,我们这里学习几个关键。

  1. Type:
    组合框有三个样式
类型何时显示列表框静态控件或编辑控件
简单无法放下编辑
Drop-down放下时编辑
下拉列表放下时静态

这里我们经常使用下拉式列表,此时内容是无法编辑的,也就是所谓的静态的。

  1. data:
    data指这里面的数据,我们可以在这里填入默认的数据,但是要分号;隔开
    越行勤;yingwiki.top;心梦莹;
    实现效果如下,样式是下拉列表
    image.png
  2. sort
    这个属性当初坑死我了,他会帮你把数据排序(数组的话从小到大,字符就是字典顺序,当然这些排序的依据可以改,有对应的函数),默认是true,不需要的话要改掉!
    image.png

事件

组合框被操作时会向父窗口发送通知消息,这些常用通知消息及其含义如下:

  1. CBN_DBLCLK 鼠标双击
  2. CBN_DROPDOWN 列表框被弹出
  3. CBN_KILLFOCUS / ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生
  4. CBN_SELCHANGE 列表框中选择的行发生改变
  5. ON_CBN_EDITUPDATE 输入框中内容被更新

image.png

主要方法

  1. int GetCount( ) const;
    获取组合框控件的列表框中列表项的数量。
  2. int GetCurSel( ) const;
    获取组合框控件的列表框中选中项的索引,如果没有选中任何项,该函数返回CB_ERR。
  3. int SetCurSel(int nSelect);
    在组合框控件的列表框中选择某项。nSelect参数指定了要选择的列表项的索引,如果为-1则列表框中当前选择项被取消选中,编辑框也被清空。
  4. DWORD GetEditSel( ) const;
    获取组合框控件的编辑框中当前选择范围的起始和终止字符的位置。该函数返回一个32位数,低16位存放起始位置,高16位存放选择范围后第一个非选择字符的位置。如果该函数用于下拉列表式组合框时,会返回CB_ERR。
  5. int AddString(LPCTSTR lpszString);
    为组合框控件中的列表框添加新的列表项。lpszString参数是指向要添加的字符串的指针。该函数的返回值如果大于等于0,那么它就是新列表项的索引,而如果有错误发生则会返回CB_ERR,如果没有足够的内存存放新字符串则返回CB_ERRSPACE。
  6. int DeleteString(UINT nIndex);
    删除组合框中某指定位置的列表项。nIndex参数指定了要删除的列表项的索引。该函数的返回值如果大于等于0,那么它就是组合框中剩余列表项的数量。如果nIndex指定的索引超出了列表项的数量则返回CB_ERR。
  7. int InsertString(int nIndex,LPCTSTR lpszString);
    向组合框控件的列表框中插入一个列表项。nIndex参数指定了要插入列表项的位置,lpszString参数则指定了要插入的字符串。该函数返回字符串被插入的位置,如果有错误发生则会返回CB_ERR,如果没有足够的内存存放新字符串则返回CB_ERRSPACE。
  8. int SelectString(int nStartAfter,LPCTSTR lpszString);
    在组合框控件的列表框中查找一个字符串,如果查找到则选中它,并将其显示到编辑框中。参数同FindString。如果字符串被查找到则返回此列表项的索引,如果查找失败则返回CB_ERR,并且当前选择项不改变。

实践

说了那么多我们就具体实践一下吧

添加项目

  • 方法1
    直接修改data属性
  • 方法2
    添加使用类向导添加一个空间成员,调用addstring 方法
    image.png
    添加的控件成员是和我们实际现实的控件关联的,靠的是DoDataExchange(CDataExchange* pDX)函数,如果不了解的话可以查阅钱,前面的文章--类向导在帮你做什么
    然后我们在通过这个对象带控制组合框
    我们以写到初始化对话框的函数里面,插入一个选项为例子
    image.png

获取所选的序号

我们要知道用户所选的选项,我们只需要调用前面介绍的GetCurSel就好了。
image.png

注意!

我们添加变量的时候可以添加两个变量,一个是控件变量一个是数据变量,不建议两个同时都加,这样容易出错。所以我们有另一种方法去控制组合框。

获取控件指针 GetDlgItem()

例如我们要获取组合框的指针
CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_CMB);

CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO1);
pComboBox->InsertString(3,L"我爱你");//差入一个选项
int n= pComboBox->GetCurSel();//获取序号

image.png
看,和前面的方法实现的效果是一样的。

组合框介绍结束

其他的方法自己融合一下就好了。

列表框

其实我应该先介绍列表框的,组合框就是列表框和编辑框的组合,所以我这里就不在详细介绍了,可以查阅官方文档。

点我访问列表框官方文档

结语

没有结语就是最好的结语
79A59EF56224B22753145CEA8E88BAA2-dfc4efa7ed3d4a6480b9233445c2e872

努力成长的程序员