您的位置:首页 > 其它

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

2017-12-07 12:09 656 查看
CSDN新首页上线啦,邀请你来立即体验!
旧版

立即体验

博客

学院
下载
GitChat
更多

论坛
问答
活动
码云
商城
ITeye
极客头条



写博客

发布Chat

登录注册

设置昵称

我的博客
消息(3)
设置
反馈
退出

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

转载 2015年09月10日 09:18:40

标签:
combo box
/
mfc
/
代码
/
操作
/
1681

编辑

删除


Combo Box (组合框)控件很简单,可以节省空间。从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本。下面的例子简要说明如何利用
MFC CComboBox Class来操作字符串列表。

1、定义控件对应变量

假定已经创建了一个Dialog,并且从控件工具箱将 Combo Box控件拖放到上面。打开 Class Wizard,添加控件对应变量,如:CComboBox
m_cbExamble;


在后面的代码中会不断使用这个变量。

2、向控件添加 Items

       1)在Combo Box控件属性的Data标签里面添加,一行表示Combo
Box下拉列表中的一行。换行用ctrl+回车。

2)利用函数 AddString()向 Combo Box控件添加
Items,如:

m_cbExample.AddString(“StringData1”);

m_cbExample.AddString(“StringData2”);

m_cbExample.AddString(“StringData3”);

3)也可以调用函数 InsertString()将 Item插入指定位置
nIndex,如:

m_cbExample.InsertString( nIndex, “StringData” );

3、从控件得到选定的Item

假设在控件列表中已经选定某项,现在要得到被选定项的内容,首先要得到该项的位置,然后得到对应位置的内容。这里会用到两个函数,如:

int nIndex = m_cbExample.GetCurSel();

CString strCBText;

m_cbExample.GetLBText( nIndex, strCBText);

这样,得到的内容就保存在 strCBText中。

若要选取当前内容,可调用函数GetWindowText(strCBText)

4、在控件中查找给定Item

这种操作一般用于在程序中动态修改控件中该项的值,可以用函数FindStringExact()精确匹配,如:

int nIndex = m_cbExample.FindStringExact( nStartAfter, “value to be found”);

nStartAfter指明从哪一行开始查找。如果查找成功,返回的是该项的位置;否则,返回CB_ERR。

也可以选中包含指定字符串的项,如:

int nIndex = m_cbExample.SelectString( nStartAfter, “value to be selected”);

5、删除控件中的Item

该操作可以利用函数DeleteString(),需要指定被删除项的位置,如:

m_cbExample.DeleteString(nIndex);

也可以使用函数ResetContent(),清除目前的所有项,如:

m_cbExample.ResetContent();

6、显示控件中的某项

int nIndex = m_cbExample.GetCurSel(); //当前选中的项

m_cbExample.SetCurSel(nIndex); //设置第nIndex项为显示的内容

7、得到或设置输入框中被选中的字符位置

DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar );

BOOL LimitText( int nMaxChars );设置输入框中可输入的最大字符数。

8、列表框常用消息映射宏

      ON_CBN_DBLCLK鼠标双击

ON_CBN_DROPDOWN列表框被弹出

ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS在输入框失去/得到输入焦点时产生

ON_CBN_SELCHANGE列表框中选择的行发生改变

ON_CBN_EDITUPDATE输入框中内容被更新

 

 

 

 

 

 

补充:

一、如何添加/删除Combo Box内容

1,在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。

2,在程序初始化时动态添加

如: //控件内容初始化

CString strTemp;

((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//消除现有所有内容

for(int i=1;i<=100;i++)

{

   strTemp.Format("%d",i);

   ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);

}

3,下拉的时候添加

如:CString strTemp;

int iCount=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCount();//取得目前已经有的行数

if(iCount<1)//防止重复多次添加

{

   ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();

   for(int i=1;i<=100;i++)

   {

    strTemp.Format("%d",i);

    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);

   }

}

4,删除

DeleteString( UINT nIndex )//删除指定行,

5,插入

InsertString( int nIndex, LPCTSTR lpszItem )//将行插入到指定位置

6,查找

FindString( int nStartAfter, LPCTSTR lpszItem )//可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。

int SelectString( int nStartAfter, LPCTSTR lpszItem )//可以选中包含指定字符串的行

二、如何控制Combo Box的下拉长度

1,首先要知道两点:一、那就是在设计界面里,点击一下Combo Box的下拉箭头,此时出现的调整框就是Combo Box的下拉调整框。

2,二、属性里有个 No integral height 钩选项,表示最大长度为设计长度,如果实际内容比设计长度多,就出现滚动条,少就以实际长度显示。

三、选择其中的某行

1,选中:

int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel();//当前选中的行。

2,设置

((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n)//设置第n行内容为显示的内容。

四、取得Combo Box框内容

1取当前内容

((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp);

2取其他行内容

((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp);

四、获得焦点

通常要判断控件是否获得了焦点,可以用GetFocus()函数

例如:if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判断焦点是否在编辑框IDC_EDIT_VALUE2内。

但是combobox 的焦点不同,因为它是由edit和listbox两部分组成的

所以获得焦点要用GetParent():if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))

控制Combo Box的下拉长度

1,首先要知道两点:一、那就是在设计界面里,点击一下Combo Box的下拉箭头,此时出现的调整框就是Combo Box的下拉调整框。

二、属性里有个 No integral height 钩选项,表示最大长度为设计长度,如果实际内容比设计长度多,就出现滚动条,少就以实际长度显示。

VC++ Combo Box/Combo Box Ex控件

  组合窗口是由一个输入框和一个列表框组成。创建一个组合窗口可以使用成员函数:

BOOL CListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );

其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你可以针对列表控件指明专门的风格。

CBS_DROPDOWN 下拉式组合框

CBS_DROPDOWNLIST 下拉式组合框,但是输入框内不能进行输入

CBS_SIMPLE 输入框和列表框同时被显示

LBS_SORT 所有的行按照字母顺序进行排序

由于组合框内包含了列表框,所以列表框的功能都能够使用,如可以利用:

int AddString( LPCTSTR lpszItem )添加行,

int DeleteString( UINT nIndex )删除指定行,

int InsertString( int nIndex, LPCTSTR lpszItem )将行插入到指定位置。

void ResetContent( )可以删除列表框中所有行。

通过调用int GetCount( )得到当前列表框中行的数量。

如果需要得到/设置当前被选中的行的位置,可以调用int GetCurSel( )/int SetCurSel(int iIndex)。通过调用int GetLBText( int nIndex, LPTSTR lpszText )得到列表框内指定行的字符串。

此外通过调用int FindString( int nStartAfter, LPCTSTR lpszItem )可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。

int SelectString( int nStartAfter, LPCTSTR lpszItem )可以选中包含指定字符串的行。

此外输入框的功能都能够使用,如可以利用:

DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar )得到或设置输入框中被选中的字符位置。

BOOL LimitText( int nMaxChars )设置输入框中可输入的最大字符数。

输入框的剪贴板功能Copy,Clear,Cut,Paste动可以使用。

最后介绍一下列表框几种常用的消息映射宏:

ON_CBN_DBLCLK 鼠标双击

ON_CBN_DROPDOWN 列表框被弹出

ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生

ON_CBN_SELCHANGE 列表框中选择的行发生改变

ON_CBN_EDITUPDATE 输入框中内容被更新

使用以上几种消息映射的方法为定义原型如:afx_msg void memberFxn( );的函数,并且定义形式如ON_Notification( id, memberFxn )的消息映射。如果在对话框中使用组合框,Class Wizard会自动列出相关的消息,并能自动产生消息映射代码。

在MFC 4.2中对组合框进行了增强,你可以在组合框中使用ImageList,有一个新的类CComboBoxEx(由CComboBox派生)来实现这一功能。在CComboBoxEx类中添加了一些新的成员函数来实现新的功能:首先你需要调用CImageList* SetImageList( CImageList* pImageList );来设置ImageList,然后调用

int InsertItem( const COMBOBOXEXITEM* pCBItem );来添加行,其中COMBOBOXEXITEM定义如下:

typedef struct { UINT mask; int iItem; LPTSTR pszText; int cchTextMax; int iImage; int iSelectedImage; int iOverlay;       int iIndent; LPARAM lParam;} COMBOBOXEXITEM, *PCOMBOBOXEXITEM;

你需要设置mask=CBEIF_IMAGE CBEIF_TEXT,并设置iItem为插入位置,设置pszText为显示字符串,设置iImage为显示的图标索引。下面的代码演示了如何进行插入:

/*m_cbeWnd 为已经创建的CComboBox对象

m_list 为CImageList对象IDB_IMG 为16*(16*4)的位图,每个图片为16*16共4个图标*/

m_list.Create(IDB_IMG,16,4,RGB(0,0,0));

m_cbeWnd.SetImageList(&m_list);

COMBOBOXEXITEM insItem;insItem.mask=CBEIF_IMAGE CBEIF_TEXT;insItem.iItem=0; insItem.iImage=0;insItem.pszText="Line 1";m_cbeWnd.InsertItem(&insItem);insItem.iItem=1;insItem.iImage=1;insItem.pszText="Line
2";m_cbeWnd.InsertItem(&insItem);

通过调用int DeleteItem( int iIndex );来删除行,并指明行的位置。

通过调用BOOL GetItem( COMBOBOXEXITEM* pCBItem )/BOOL SetItem( const COMBOBOXEXITEM* pCBItem );来得到/设置行数据。

阅读全文

本文已收录于以下专栏:

目前您尚未登录,请

登录 或
注册 后进行评论

相关文章推荐

MFC COMBOBOX 短代码 实现的自动匹配输入 自动完成 但有小缺陷

mfc自带的combobox控件实现自动匹配输入,biru




jhonkingcai

2014年07月20日 21:59
1052

VC CComboBox控件自动匹配输入的关键字

要做个搜索框,用MFC的CComboBox控件




u014541681

2014年04月04日 14:29
856





【程序员之路】我是前端工程师,怎么了?

今天我30岁了,在此之际,回想我的程序生涯之路,十分感慨,谈谈我作为程序员的选择之路..

VC++之ComboBox的用法总结

1. 对话框中 添加 combox 控件2. 添加变量定义 CComboBox m_droplist;3. 添加内容:m_dropbox.SetCurSel(1);m_...





liqing19850102

2012年05月16日 23:17
41304

VC++ combobox模糊匹配,自动匹配

VC++ combobox模糊匹配,自动匹配




zhao0210

2015年05月21日 14:30
2133

MFC ListBox实现CheckBox功能(附带复选框)

1、首先在窗口上拖放一个ListBox控件,假设其资源ID为IDC_LIST1;     如果界面有多个ListBox,可以拖动多个该控件到界面,如何设其资源ID。2、如上所述修改该L...





pugongying1988

2012年12月20日 17:02
7112





人人都能看懂的 AI 入门课

本课程将讲述人工智能的现状、应用场景和入门方法,并通过运用 TensorFlow,使得受众能清晰了解人工智能的运作方式。

VC++中combo box(组合框)控件使用说明/MFC COMBOBOX的使用

转自:不知道。。。Combo Box (组合框)控件很简单,可以节省空间。从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个预先定义的列表里选择一个选...





banrixianxin

2014年05月16日 00:25
2419

VS2010/MFC编程入门之二十一(常用控件:编辑框Edit Control)

VS2010/MFC编程入门之二十一(常用控件:编辑框Edit Control)分类标签: 编程入门  VS2010  VC++  MFC         鸡啄米上一节...





u013362499

2015年04月21日 21:13
4235





Delphi7高级应用开发随书源码

2003年04月30日 00:00
676KB
下载

MFC Combobox 输入内容自动补全并选中缺失部分(类似qq登录输入账号)

客户端是需登录的,登录是需要输入账号的,每次输入重复的东西总会让人厌烦,于是乎需要程序自动补全你想输入的内容。MFC里面通常用来实现登录账号的控件就是Combobox啦。首先你得有保存用户之前的登...





qiangzi4646

2017年03月02日 17:41
236

MFC中的ComboBox的使用

MFC ComboBox 一、入门篇 ComboBox (组合框)控件很简单,可以节省空间。从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个预先定义的列...





yunqi415

2011年11月12日 22:05
29472

MFC ComboBox怎么设置默认项

这是在类的OnInitDlg()中this->m_Combo.AddString("A");this->m_Combo.AddString("B");this->m_Combo.AddStr...





mfmfmmf1

2015年04月27日 20:55
3260

MFC之ComboBox控件

很久没用MFC了,不过还是挺快找回了感觉~突然要用到ComboBox控件,网上查找了一番,用法总结一下。        ComboBox简介:ComboBox控件是由一个文本输入控件和一个...





woaixiaozhe

2012年05月22日 18:24
8438

mfc中,COMBOBOX如何获取输入的文本内容

简单的获取Combobox的选中内容是很简单的:CString strChoosed;m_mediaCombox.GetLBText(m_mediaCombox.GetCurSel...





Leighton_52

2013年08月26日 14:12
4381

在MFC中,设置ComboBox控件中下拉列表的高度

在MFC中,如何设置ComboBox控件下拉列表的高度方法一:(只适用于静态创建)如果是从MFC资源框中拖放下拉控件,那么可以单击下拉框的向下箭头,调整弹出的虚线框,就可以实现了。方法二:(...





youyongyoumou

2015年06月04日 17:18
5367

MFC中ComboBox控件的使用

MFC ComboBox 一、入门篇 ComboBox (组合框)控件很简单,可以节省空间。从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从...





rayborn1105

2012年10月09日 12:29
21846

MFC使用ComboBox控件方法

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





nonecode

2012年10月31日 20:47
3843

MFC中的ComboBox的使用

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





u013713010

2015年01月20日 15:35
743

MFC-ComBox控件用法

向ComBox控件中插入字符串方法1;与控件关联CString类型变量 //只能添加一个字符串 m_combox = _T("test"); UpdateData(FALSE);...





qq_18297675

2016年03月25日 15:09
2118

【mfc】组框、单选框控件与复选框控件

VC6中的MFC中的单选框与复选框控件也不简单,它没有VS中C#那样可以之间通过一个封装之后的函数进行判断,该单选框/复选框有没有被选中啊?或者控制单选框/复选框的选中状态。这东西比较复杂,通过相应的...





yongh701

2015年02月12日 09:47
3664

使用C++ ostringstream来格式化字符串输出

在Linux C中,我们通常使用snprintf来格式化字符串输出,但是




tao_627

2014年09月02日 08:16
3264




Fzuim

+关注

原创 48 粉丝 3 喜欢 0 码云 未开通

他的最新文章

更多文章

POCO线程类分析

POCO线程池分析

微信后台PhxRPC编译教程

相关推荐

MFC COMBOBOX 短代码 实现的自动匹配输入 自动完成 但有小缺陷

VC CComboBox控件自动匹配输入的关键字

VC++之ComboBox的用法总结

VC++ combobox模糊匹配,自动匹配

在线课程





腾讯云容器服务架构实现介绍

讲师:董晓杰





微博热点事件背后的数据库运维心得

讲师:张冬洪

他的热门文章

FileZilla网络配置
2348

C++通过进程名获取进程句柄
2123

Delphi 文件夹遍历所有文件包括子文件文件,并可通过后缀过滤
1883

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

Delphi-将ListView内容导出到文件
1275

1

不良信息举报

您举报文章:MFC 控件下拉选择和输入的 ComboBox使用
举报原因:色情
政治
抄袭
广告
招聘
骂人

其他
原文地址:
原因补充:(最多只允许输入30个字)


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐