mfc groupbox的用法,mfc checkbox
组合框控件简单,可以节省空间。从用户的角度来看,这个控件由一个文本输入控件和一个下拉菜单组成。用户可以从预定义的列表中选择一个选项,同时可以直接在文本框中输入文本。下面的示例简要说明了如何使用MFC CComboBox类来操作字符串列表。
1.定义控件的相应变量。
假设已经创建了一个对话框,并将组合框控件从控件工具箱拖放到该对话框上。打开类向导,添加控件对应的变量,如CComboBox m _ cbExamble
这个变量将在下面的代码中连续使用。
2.向控件添加项
1)添加到组合框控件属性的数据标签中,一行代表组合框下拉列表中的一行。使用ctrl键输入。
2)使用函数AddString()向组合框控件添加项目,例如:
m_cbExample。AddString(" string data 1 ");
m_cbExample。AddString(" string data 2 ");
m_cbExample。AddString(" string data 3 ");
3)还可以调用函数InsertString()将项目插入到指定位置nIndex,例如:
m_cbExample。InsertString( nIndex,“string data”);
3.从控件中获取选定的项。
假设在控件列表中选择了一个项目,现在要获取所选项目的内容,首先获取该项目的位置,然后获取相应位置的内容。这里将使用两个函数,例如:
int nIndex=m_cbExample。GetCurSel();
CString strCBText
m_cbExample。GetLBText( nIndex,strCBText);
这样,获得的内容保存在strCBText中。
要选择当前内容,可以调用函数GetWindowText(strCBText)。
4.在控件中查找给定的项。
这种操作一般用于在程序中动态修改控件中该项的值,可以和函数FindStringExact()精确匹配,比如:
int nIndex=m_cbExample。FindStringExact( nStartAfter,“要查找的值”);
指示从哪一行开始搜索。如果搜索成功,则返回项目的位置;否则,返回CB_ERR。
您也可以选择包含指定字符串的项目,例如:
int nIndex=m_cbExample。SelectString( nStartAfter,“要选择的值”);
5.删除控件中的项。
这个操作可以使用函数DeleteString(),需要指定被删除项的位置,比如:
m_cbExample。delete string(nIndex);
还可以使用ResetContent()函数清除所有当前项目,例如:
m_cbExample。reset content();
6.在控件中显示一项。
int nIndex=m_cbExample。GetCurSel();//当前选定的项目
m_cbExample。SetCurSel(nIndex);//将nIndex项设置为显示内容。
7.获取或设置输入框中所选字符的位置。
DWORD GetEditSel()/BOOL SetEditSel(int nstart char,int nEndChar);
BOOL limit text(int nmax chars);设置可在输入框中输入的最大字符数。
8.列表框的通用消息映射宏
ON_CBN_DBLCLK鼠标双击
弹出ON_CBN_DROPDOWN列表框。
当输入框失去/获得输入焦点时,生成on _ CBN _ kill focus/on _ CBN _ setfocus。
在ON_CBN_SELCHANGE列表框中选择的行发生变化。
ON_CBN_EDITUPDATE输入框被更新。
补充:
I .如何添加/删除组合框内容
1.添加到组合框控件属性的数据标签中,一行代表组合框下拉列表中的一行。使用ctrl键输入。
2.程序初始化时动态添加。
如://控制内容初始化
CString strTemp
((ccombox *)GetDlgItem(IDC _ COMBO _ CF))-reset content();//消除所有现有内容
for(int I=1;i=100我)
{
strTemp。格式( %d ,I);
((ccombox *)GetDlgItem(IDC _ COMBO _ CF))-AddString(strTemp);
}
3.放下来就加。
如:CString strTemp
int iCount=((ccombox *)GetDlgItem(IDC _ COMBO _ CF))-GetCount();//获取当前已有线数。
If(iCount 1)//防止重复多次加法
{
((ccombox *)GetDlgItem(IDC _ COMBO _ CF))-reset content();
for(int I=1;i=100我)
{
strTemp。格式( %d ,I);
((ccombox *)GetDlgItem(IDC _ COMBO _ CF))-AddString(strTemp);
}
}
4.删除
delering(uint index)//删除指定的行,
5、插入
InsertString (int nindex,lpctstr lpszitem)//在指定位置插入一行。
6、寻找
Find string (int nStartAfter,lpctstr lpszitem)//可以在当前所有行中查找指定字符传输的位置,nStartAfter表示从哪一行开始搜索。
Select string (int start after,lpctstr lpszitem)//可以选择包含指定字符串的行。
二、如何控制组合框的下拉长度
1.首先你要知道两件事:第一,在设计界面中,点击组合框的下拉箭头,此时出现的调整框就是组合框的下拉调整框。
2,2,属性中有一个非整数高度挂钩选项,表示最大长度为设计长度。如果实际内容超过设计长度,会出现滚动条,如果少于设计长度,会以实际长度显示。
3.选择其中一行。
1、选择:
int iPos=((ccombox *)GetDlgItem(IDC _ COMBO _ CF))-GetCurSel();//当前选定的行。
2、设置
((ccombox *)GetDLGitem(IDC _ Combo _ CF))-SetCursel(n)//将第n行内容设置为显示内容。
四。获取组合框的内容
1取当前内容
((ccombox *)GetDlgItem(IDC _ COMBO _ CF))-GetWindowText(strTemp);
2取其他行的内容。
((ccombox *)GetDlgItem(IDC _ COMBO _ CF))-GetLBText(n,strTemp);
第四,获得焦点
通常,要确定控件是否有焦点,可以使用GetFocus()函数
示例:if(get focus()==getdlgitem(IDC_EDIT_VALUE2))//确定焦点是否在编辑框IDC _ EDIT _ value 2中。
但是combobox的侧重点不一样,因为它由编辑和列表框组成。
所以用getparent()获得焦点:if((get focus()-get parent())==getdlgitem(IDC _ combo _ cf))
控制组合框的下拉长度。
1.首先你要知道两件事:第一,在设计界面中,点击组合框的下拉箭头,此时出现的调整框就是组合框的下拉调整框。
第二,属性中有一个非整数高度挂钩选项,表示最大长度为设计长度。如果实际内容超过设计长度,就会出现滚动条,如果少于设计长度,就会显示实际长度。
VC组合框/Ex控件组合框
组合窗口由输入框和列表框组成。您可以使用成员函数来创建复合窗口:
BOOL clist box:Create(LPCTSTR lpszText,DWORD dwStyle,const RECT rect,CWnd* pParentWnd,UINT nID=0x ffff);
其中,dwStyle会指明窗口的样式。除了子窗口的常见样式WS _ Child和WS _ Visible之外,您还可以为列表控件指定一种特殊的样式。
CBS_DROPDOWN下拉组合框
CBS_DROPDOWNLIST下拉组合框,但不能在输入框中进行任何输入。
CBS_SIMPLE输入框和列表框同时显示。
LBS_SORT的所有行都是按字母顺序排序的。
因为组合框包含列表框,所以可以使用列表框的所有功能,例如:
Addstring (lpctstr lpszitem)添加一行,
删除指定的行,
IntinsertString (intnindex,lpctstr lpszitem)在指定位置插入一行。
Void ResetContent()可以删除列表框中的所有行。
调用int GetCount()获取当前列表框中的行数。
如果需要获取/设置当前选中行的位置,可以调用intgetcursel()/intsetcursel(intindex)。通过调用int getlbtext (int nindex,lptstr lpsztext)获取列表框中指定行的字符串。
另外,通过调用intfindstring (intnStartAfter,lpctstr lpszitem),可以在当前所有行中找到指定字符传输的位置,nStartAfter表示从哪一行开始搜索。
Select string (int start after,lpctstr lpszitem)可以选择包含指定字符串的行。
此外,可以使用输入框的功能,例如:
ordgeteditsel()/bool seteditsel(intnstartchar,intnendchar)获取或设置输入框中选定字符的位置。
Boolimittext (int n maxchars)设置可以在输入框中输入的最大字符数。
可以使用输入框的剪贴板功能复制、清除、剪切和粘贴。
最后,介绍一些常见的列表框消息映射宏:
ON_CBN_DBLCLK鼠标双击
弹出ON_CBN_DROPDOWN列表框。
当输入框失去/获得输入焦点时,生成on _ CBN _ kill focus/on _ CBN _ setfocus。
在ON_CBN_SELCHANGE列表框中选择的行发生变化。
ON_CBN_EDITUPDATE输入框被更新。
使用以上几种消息映射的方法为定义原型如:afx_msg查看成员fxn();的函数,并且定义形式如ON_Notification( id,memberFxn)的消息映射。如果在对话框中使用组合框,类向导会自动列出相关的消息,并能自动产生消息映射代码。
在MFC 4.2中对组合框进行了增强,你可以在组合框中使用ImageList(图像列表),有一个新的类ccomboboxex(由组合框控件派生)来实现这一功能。在ccomboboxex(消歧义)类中添加了一些新的成员函数来实现新的功能:首先你需要调用cimagelist * set magelist(cimagelist * piment list);来设置ImageList(图像列表),然后调用
int insert tem(const combobomxexiem * pcbitem);来添加行,其中康柏西汀定义如下:
typedef结构{ UINT掩码:内部iitemlptstr psztextint qtext x;内部iimageint是selectedimage内瓦索莱;内部;内部:LPARLPAR}复方新诺明,* pcomboboxexitem
你需要设置mask=CBEIF_IMAGE CBEIF_TEXT,并设置-是啊为插入位置,设置psztext文字为显示字符串,设置太糟了为显示的图标索引。下面的代码演示了如何进行插入:
页:1为已经创建的组合框控件对象
m_list(消歧义)为CImageList(图像列表)对象IMG国际开发银行为16*(16*4)的位图,每个图片为十六*十六共四个图标*/
m _列表参数。创建(IDB_IMG,16,4,RGB(0,0,0));
-伊甸园字幕组=-翻译:setmagelist(m _ list):
连翘曲酶坚持的;连翘曲;连翘曲;连翘曲;连翘曲;连翘曲;连翘曲;连翘曲;连翘曲;连翘曲;连翘曲;连翘曲;连翘曲;连翘曲。输入。mask=CBEIF_IMAGE CBEIF_TEXT:输入。iitem=0:坚持iimage=0插入。psztext=第1行-伊甸园字幕组=-翻译:insertitem(坚持);输入。iitem=1:坚持iimage=1插入。psztext=第2行-伊甸园字幕组=-翻译:insertitem(坚持);
通过调用int delete item(int iiindex):来删除行,并指明行的位置。
通过调用bool getitem(combobomxexitem * pcbite)/bool setitem(const combobomxexitem * pcbite);来得到/设置行数据。