MFC 控件ComboBox问题

原创 2013年12月02日 14:38:02

ComboBox控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本.它的用法如下:

从工具栏中拖一个Combo Box控件.右击添加变量,变量名为cbBox.

1.为控件添加选项,指定默认选项

cbBox.AddString(_T("one"));

cbBox.AddString(_T("two"));

cbBox.AddString(_T("three"));

每个选项都有一个对应的索引号,跟数组下标一样,从0开始.由于默认的排序方式是按字母先后顺序所以one,two,three的索引为0,2,1

我们也可以把选项添加到指定的索引位置

cbBox.InsertString(0,_T("aaa")); //此时one,two,three的索引变为1,3,2

假如打开对话框时,我们要让three选项为combobox的默认选项.

cbBox.SetCurSel(2); //不过我们不太可能去记住每个选项的索引,所以先查找下它的索引是多少

int  index =cbBox.FindStringExact(0,_T("three"));//0表示从索引为0的选项开始查找.如果找到有叫three的选项就返回它的索引号,没有找到返回CB_ERR也就是-1.

反过来我们已经有个选项显示在那了要知道它的索引号是多少

int index = cbBox.GetCurSel(); 

2.选择某个选项并获取其值

先获取索引号再根据索引号获取值.

CString csValue;

int  index = cbBox.GetCurSel();

cbBox.GetLBText(index,csValue);//选项的值保存到csValues中

其实还有个更简单的获取值的方法,我们选项某个项之后它会显示在文本输入控件中.我们直接获取就行

cbBox.GetWindowTextW(csValue);

3.查找列表中的选项.

int  index =cbBox.FindStringExact(0,_T("three"));  //精确查找.

int  index =cbBox.FindString(0,_T("three"));          //模糊查找.如果有选项threeabc也会返回索引值

假如下拉列表中的选项太多,你不愿意一个个的去选该怎么办?

你可以在文本框中输入选项的前几个字,如果匹配到个某个选项将会自动显示在文本框中.这要用到模糊查询

首先要添加一个ON_CBN_EDITCHANGE事件.ON_CBN_EDITCHANGE消息映射宏会把文本框中输入值变化的消息绑定到一个函数中去处理

然后在消息处理函数中添加如下代码:

CString temp;

cbBox.GetWindowTextW(temp);//把文本框中输入的值放到一个变量temp中

int n =cbBox.FindString(0,temp);//查找下拉列表中是否是哪个选项包含字符串temp

if(n>=0)

{

       cbBox.SetCurSel(n);  //查找到的话就把选项名字显示在文本框中

}

4.删除选项

删除所有选项,也可以把下拉列表置空

cbBox.ResetContent();

删除某个选项.只能先查找到对应的索引号,再根据索引号删除

int  index =cbBox.FindStringExact(0,_T("three"));

cbBox.DeleteString(index);

 

5.Extended Combo Box选项前面带个图标

 

Extended Combo Box的功能比Combo Box更多一点.其中有个功能就是可以在选项前加个图标.

先添加一个Extended Combo Box控件.并给它添加一个变量cbBoxE.

CImageList*pImageList;     //相当于一个特殊数组,但是它保存的是图片

pImageList = newCImageList();

pImageList->Create(32, 32,ILC_COLOR32, 0, 4); //

//在资源中添加一个bmp图片.id为IDB_BITMAP1

CBitmap bmp;

bmp.LoadBitmap(IDB_BITMAP1);//加载资源中的图片

pImageList->Add(&bmp, RGB(0,0, 0)); //添加图片到imagelist中

cbBoxE.SetImageList(pImageList);

COMBOBOXEXITEM insItem;//添加图片选项时的参数.它是一个结构体,下面是里面一些变量的初始化

insItem.mask =CBEIF_IMAGE|CBEIF_TEXT;

insItem.iItem=0;

insItem.iImage=0;

insItem.pszText=_T("Line1");

cbBoxE.InsertItem(&insItem);//在控件中添加一个选项,并且选项前面有图片

MFC-自绘控件(CComBox篇)

示例图 一、公共文件 和这篇一样,就不写了(MFC-自绘控件(CButton篇)) 二、CComBox 头文件 #pragma once #include "Public.h" #include ...
  • wyansai
  • wyansai
  • 2016年03月29日 00:44
  • 1716

MFC中的ComboBox的使用

一、入门篇   ComboBox (组合框)控件很简单,可以节省空间。从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个预先定义的列表里选择一个选项,同时也可...
  • u013713010
  • u013713010
  • 2015年01月20日 15:35
  • 800

MFC 控件下拉选择和输入的 ComboBox使用

学习笔记
  • fzuim
  • fzuim
  • 2015年09月10日 09:18
  • 1944

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

上一节讲了列表框控件ListBox的使用,本节主要讲解组合框控件Combo Box。组合框同样相当常见,例如,在Windows系统的控制面板上设置语言或位置时,有很多选项,用来进行选择的控件就是组合框...
  • zhaoyinhui0802
  • zhaoyinhui0802
  • 2016年12月01日 19:08
  • 3254

combobox之属性介绍

Auto当用户在行尾输入字符时,自动将文本滚动到左侧,这个属性可解决combobox编辑框在有限长度内,通过移动光标可以显示全部的文本内容。这个默认属性是False。Sort在默认情况下,combob...
  • xiao3404
  • xiao3404
  • 2017年03月12日 12:24
  • 1838

MFC Combo-Box 控件下拉框问题

初写程序时,通过addstring()函数,在combox里面添加数据,可运行时,并不显示这些数据。。。。。 如何解决这个问题呢??一般通过以下方法就能解决 改变ComboBox下拉框的大...
  • lian_gong2009
  • lian_gong2009
  • 2016年06月18日 22:18
  • 1044

美化combox 用法 —— 为其添加图片,改变显示方式

对C# 中Combox控件的一些简单的操作,改变其显示特性,主要是改变其中的项的属性 我们需要注意的是:每次为Combox添加项的时候,就会触发DrawItem事件,而我们正是通过DrawIte...
  • chanyinhelv
  • chanyinhelv
  • 2013年08月01日 16:28
  • 3422

MFC之ComboBox控件用法

本文以实例形式较为详细的讲述了MFC中ComboBox控件的用法。分享给大家供大家参考之用。具体方法如下: 一、ComboBox简介: ComboBox控件是由一个文本输入控件和一个下拉菜单组成的。用...
  • Qsir
  • Qsir
  • 2017年05月14日 13:11
  • 371

VS2010/MFC入门编程十五(COMBOX 控件操作)

Combo Box (组合框)控件很简单,可以节省空间。从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本...
  • yu__jia
  • yu__jia
  • 2014年07月17日 11:18
  • 2694

MFC中ComboBox控件的使用

MFC ComboBox 一、入门篇 ComboBox (组合框)控件很简单,可以节省空间。从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个...
  • Andy20081251
  • Andy20081251
  • 2014年12月11日 17:19
  • 640
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC 控件ComboBox问题
举报原因:
原因补充:

(最多只允许输入30个字)