您的位置:首页 > 其它

MFC控件combox控件用法梳理

2017-01-02 17:17 633 查看

ComboBox (组合框)控件

ComboBox (组合框)控件感觉像是edit的扩展,具有edit控件的一些属性。

首先创建一个对话框应用程序,然后进入对话框资源视图,在工具箱中拖拉一个combox控件,然后编辑一个有意义的ID,以及你需要的类型,有三种类型,第一种是simple,第二种是Dropdown,第三种是Drop List;当然首次创建静态控件会默认为第二种Dropdown.这种控件里可以编辑,而第三种不可以编辑,只能用于显示文本,第一种则是最简单,完全平铺开来,最不常用。打开
Class Wizard,添加控件对应变量,如:
1、定义控件对应变量

CComboBox m_cbcombox;

DDX_Control(pDX, IDC_COMBO2, m_cbcombox);

2.向控件添加
数据项Item
有两种方式,第一种我把它成为盲插,为什么呢?因为它不指定行进行插入,利用函数AddString,
m_cbcombox.AddString(_T("北京"));
m_cbcombox.AddString(_T("上海"));

m_cbcombox.AddString(_T("广州"));

这种一般不能按照自己意愿顺序先后插入,可能顺序是错乱的。需要在其属性sort中,修改为false。
第二种我要告诉大家的是可以按照行号进行插入,它所用的的API是InsertString,
m_cbcombox.InsertString(0
,_T("北京") );
m_cbcombox.InsertString(1
,_T("上海") );

m_cbcombox.InsertString(2
,_T("广州") );

3.获取combox里选定的Item项的值
int
nIndex = m_cbcombox.GetCurSel();

CString strText;

m_cbExample.GetLBText( nIndex, strText);

4、在控件中查找给定Item

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

int nIndex =m_cbcombox.FindStringExact(
nStart, “北京”);

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

5、选中包含指定字符串的项,如:

int nIndex = m_cbcombox.SelectString( nStart, “北京”);

6、删除控件中的Item

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

m_cbcombox.DeleteString(nIndex);

7、显示控件中的某项

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

m_cbcombox.SetCurSel(nIndex); //设置第nIndex项为显示的内容
8、得到或设置输入框中被选中的字符位置

DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar);
9、设置输入框中可输入的最大字符数

BOOL
LimitText( int nMaxChars );

10、清空combox中所有数据

m_cbcombox.ResetContent();

11、获取combox中的数据项总数

m_cbcombox.GetCount();

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

ON_CBN_DBLCLK 鼠标双击

ON_CBN_DROPDOWN 列表框被弹出

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

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

ON_CBN_EDITUPDATE 输入框中内容被更新

13、

在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 );来得到/设置行数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: