COMBOX的基本使用

COMBOX的基本使用

  (2015-07-21 23:10:27)
标签: 

it

分类: MFC
组合框其实就是把一个 编辑框 和一个列表框组合到了一起,分为三种:简易(Simple)组合框、下拉式(Dropdown)组合框和下拉列表式(Drop List)组合框。下面讲讲它们的区别。

       简易组合框中的列表框是一直显示的,效果如下图:

VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box)

       下拉式组合框默认不显示列表框,只有在点击了编辑框右侧的下拉箭头才会弹出列表框,列表框弹出后如下图:

VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box)

       下拉列表式组合框的编辑框是不能编辑的,只能由用户在下拉列表框中选择了某项后,在编辑框中显示其文本。下拉列表式组合框如下图:

VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box)

       经过上面的介绍,大家应该知道,最常用的当属下拉式组合框和下拉列表式组合框了,它们在很多时候能使程序看起来更专业,更简洁,让用户在进行选择操作时更方便。

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

       CBN_CLOSEUP:组合框的列表框组件被关闭,简易组合框不会发送该通知消息
       CBN_DBLCLK:用户在某列表项上双击鼠标,只有简易组合框才会发送该通知消息
       CBN_DROPDOWN:组合框的列表框组件下拉,简易式组合框不会发送该通知消息
       CBN_EDITUPDATE:在编辑框准备显示改变了的正文时发送该消息,下拉列表式组合框不会发送该消息
       CBN_EDITCHANGE:编辑框的内容被用户改变了,与CBN_EDITUPDATE不同,该消息是在编辑框显示的正文被刷新后才发出的,下拉列表式组合框不会发送该消息
       CBN_ERRSPACE:组合框无法申请足够的内存来容纳列表项
       CBN_SELENDCANCEL:表明用户的选择应该取消,当用户在列表框中选择了一项,然后又在组合框控件外单击鼠标时就会导致该消息的发送
       CBN_SELENDOK:用户选择了一项,然后按了回车键或单击了下滚箭头,该消息表明用户确认了自己所作的选择
       CBN_KILLFOCUS:组合框失去了输入焦点
       CBN_SELCHANGE:用户通过单击或移动箭头键改变了列表的选择
       CBN_SETFOCUS:组合框获得了输入焦点

CComboBox类的主要成员函数

      因 为组合框是由编辑框和列表框组合而成的,所以组合框的操作和编辑框与列表框的操作有很多相似之处,同样的,CComboBox类的成员函数也和CEdit 类与CListBox类的成员函数有很多相似之处,不但功能相似,甚至函数名和参数也很相似。鸡啄米下面大概讲解下CComboBox类的主要成员函数, 更详细的内容可以参见MSDN。

       int GetCount( ) const;
       获取组合框控件的列表框中列表项的数量。

       int GetCurSel( ) const;
       获取组合框控件的列表框中选中项的索引,如果没有选中任何项,该函数返回CB_ERR。

       int SetCurSel(int nSelect);
       在组合框控件的列表框中选择某项。nSelect参数指定了要选择的列表项的索引,如果为-1则列表框中当前选择项被取消选中,编辑框也被清空。

       DWORD GetEditSel( ) const;
       获取组合框控件的编辑框中当前选择范围的起始和终止字符的位置。该函数返回一个32位数,低16位存放起始位置,高16位存放选择范围后第一个非选择字符的位置。如果该函数用于下拉列表式组合框时,会返回CB_ERR。

       BOOL SetEditSel(int nStartChar,int nEndChar);
       用于在组合框控件的编辑框中选择字符。nStartChar参数指定起始位置,nEndChar参数指定终止位置。

       DWORD_PTR GetItemData(int nIndex) const;
       获取组合框中指定项所关联的32位数据。nIndex参数指定组合框控件的列表框某项的索引(从0开始)。

       int SetItemData(int nIndex,DWORD_PTR dwItemData);
       为某个指定的组合框列表项设置一个关联的32位数。nIndex参数指定要进行设置的列表项索引。dwItemData参数指定要关联的新值。

       void GetLBText(int nIndex,CString& rString) const;
       从组合框控件的列表框中获取某项的字符串。nIndex参数指定要获取字符串的列表项的索引,CString参数用于接收取到的字符串。

       int GetLBTextLen(int nIndex) const;
       获取组合框控件的列表框中某项的字符串长度。nIndex参数指定要获取字符串长度的列表项的索引。  

       int GetTopIndex( ) const;
       获取组合框控件的列表框中第一个可见项的索引。

       int SetTopIndex(int nIndex);
       将组合框控件的列表框中某个指定项设置为可见的。nIndex参数指定了该列表项的索引。该函数成功则返回0,有错误发生则返回CB_ERR。

       BOOL LimitText(int nMaxChars);
       用于限制用户在组合框控件的编辑框中能够输入的最大字节长度。nMaxChars参数指定了用户能够输入文字的最大字节长度,如果为0则长度被限制为65535个字节。

       int AddString(LPCTSTR lpszString);
       为组合框控件中的列表框添加新的列表项。lpszString参数是指向要添加的字符串的指针。该函数的返回值如果大于等于0,那么它就是新列表项的索 引,而如果有错误发生则会返回CB_ERR,如果没有足够的内存存放新字符串则返回CB_ERRSPACE。

       int DeleteString(UINT nIndex);
       删除组合框中某指定位置的列表项。nIndex参数指定了要删除的列表项的索引。该函数的返回值如果大于等于0,那么它就是组合框中剩余列表项的数量。如果nIndex指定的索引超出了列表项的数量则返回CB_ERR。

       int FindString(int nStartAfter,LPCTSTR lpszString) const;
       在 组合框控件的列表框中查找但不选中第一个包含指定前缀的列表项。nStartAfter参数指定了第一个要查找的列表项之前的那个列表项的索引。 lpszString指向包含要查找的前缀的字符串。该函数的返回值如果大于等于0,那么它是匹配列表项的索引,如果查找失败则返回CB_ERR。

       int InsertString(int nIndex,LPCTSTR lpszString);
       向组合框控件的列表框中插入一个列表项。nIndex参数指定了要插入列表项的位置,lpszString参数则指定了要插入的字符串。该函数返回字符串 被插入的位置,如果有错误发生则会返回CB_ERR,如果没有足够的内存存放新字符串则返回CB_ERRSPACE。

       int SelectString(int nStartAfter,LPCTSTR lpszString);
       在组合框控件的列表框中查找一个字符串,如果查找到则选中它,并将其显示到编辑框中。参数同FindString。如果字符串被查找到则返回此列表项的索引,如果查找失败则返回CB_ERR,并且当前选择项不改变。

       此外,CComboBox类还继承了CWnd类的成员函数GetWindowText、SetWindowText等。


一个最简单的应用就是通过combox选择然后在文本框中显示出来:

主要代码如下:

  //为combox添加下拉框的内容,默认index从0开始的

    ComBox_1.AddString(_T("111"));
    ComBox_1.AddString(_T("222"));
    ComBox_1.AddString(_T("333"));
    ComBox_1.SetCurSel(0);
//为我们的文本框也设置默认的值
    SetDlgItemText(IDC_EDIT1,_T("TEXT"));
//我们希望在组合框中选中的列表项改变时,将最新的选择项实时显示到编辑框中,那么这就要用到CBN_SELCHANGE通知消息

//获取combox的索引 然后通过索引找到文本内容

    int res=ComBox_1.GetCurSel();
    CString text;
    ComBox_1.GetLBText(res,text);

//将取到的文本显示到文本框中
    SetDlgItemText(IDC_EDIT1,text);


  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
特点1:美化的并且可自定义的外观 该下拉框使用JS进行渲染。下拉框样式如下: 该外观是由CSS和图片控制。通过修改CSS可以很方便地实现更改外观。 QUI树形下拉框不存在IE6中无法被浮动层遮住等问题。 特点2:使用简单 引入脚本和相应的CSS之后, 在页面写如下的HTML代码: 然后为其指定JSON数据即可。数据格式: var zNodes1 =[ { id:1, pId:0, name:"父节点1",open:true}, { id:11, pId:1, name:"叶子节点11"}, { id:12, pId:1, name:"叶子节点12"}, { id:13, pId:1, name:"叶子节点13"}, { id:2, pId:0, name:"父节点2 ",open:true}, { id:211, pId:2, name:"叶子节点21"}, { id:212, pId:2, name:"叶子节点22"}, { id:213, pId:2, name:"叶子节点23"}, { id:214, pId:2, name:"叶子节点24"} ]; 特点3:控制某些节点不可选 如果希望某些子节点(例如父节点)不可选择,为该项JSON数据设置clickExpand:true即可,这样点击后不会选中项,而是展开子节点。 特点4:触发close事件 可以为selectTree的div添加close事件,每当内容层关闭时会调用。通过这种方式可以将选中项传递给hidden表单元素,用于提交表单。 特点5:自定义图标 下拉框树结构每个节点都可以自定义图标。效果如下: 特点6:宽度处理 QUI树形下拉框对于宽度的处理方式是:默认会有一个宽度,当树结构过宽则内容层会增大宽度用于自适应里面的内容。 还可以为下拉框和内容层强制指定一个宽度。效果如下: 特点7:树形下拉框可编辑 为下拉框代码添加一个editable="true"属性,就把它变成了一个可编辑的下拉框,效果如下: 特点8:可通过AJAX方式加载数据 下拉框的树结构可以通过ajax方式加载。详情请参见在线相关示例。 特点9:变成树形多选下拉框 为下拉框添加multiMode="true"属性,可以把它变成树形多选下拉框。效果如下: 当选择完毕后,鼠标移入可以显示所有选择的选项提示。效果如下: 特点10:树形多选下拉框的不分组模式 改变树形多选下拉框的JSON数据,让其不分组。那么就变成一个select多选下拉框。效果如下: 特点11:树形下拉框的验证 结合QUI框架的验证机制,可以方便地为树形下拉框添加验证。效果如下: 特点12:树形下拉框动态增删改选项 树形下拉框支持动态增删改选项。结合ajax机制可以方便地实现如下效果: 添加一个节点后的效果: 特点13:完美的浏览器兼容性 无论是IE6、IE7、IE8、IE9还是FireFox、Chrome、Safira,甚至在Linux下都保持功能与外观的一致性。 声明:本组件内部的树结构采用的是zTree组件,感谢zTree组件作者的支持与授权。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值