上一节鸡啄米讲了目录框控制ListBox的应用,这节关键解读组成框控制Combo Box。组成框一样非常普遍,比如,在Windows系统软件的操纵控制面板上设定語言或部位时,有许多选择项,用于开展挑选的控制便是组成框控制。它为大家的平时实际操作出示了许多便捷。
组成框控制介绍
组成框实际上便是把一个编写框和一个目录框组成来到一起,分成三种:简单(Simple)组成框、往下拉式(Dropdown)组成框和往下拉目录式(Drop List)组成框。下边讲下他们的差别。
简单组成框中的目录框是一直显示信息的,实际效果以下图:
往下拉式组成框默认设置无法显示目录框,仅有在点一下了编写框右边的往下拉箭头符号才会弹出来目录框,目录框弹出来后以下图:
往下拉目录式组成框的编写框不是能编写的,只有由客户在往下拉目录框选中择了某项后,在编写框中显示信息其文字。往下拉目录式组成框以下图:
历经上边的详细介绍,大伙儿应当了解,最经常用确当下属拉式组成框和往下拉目录式组成框了,他们在许多情况下能使程序看上去更技术专业,更简约,让客户在开展挑选实际操作时更便捷。
组成框被实际操作时候向父对话框推送通告信息,这种通告信息以及含意以下:
CBN_CLOSEUP:组成框的目录框部件被关掉,简单组成框不容易推送该通告信息
CBN_DBLCLK:客户在某目录项上双击鼠标电脑鼠标,仅有简单组成框才会推送该通告信息
CBN_DROPDOWN:组成框的目录框部件往下拉,简单式组成框不容易推送该通告信息
CBN_EDITUPDATE:在编写框提前准备显示信息更改了的文章正文时推送该信息,往下拉目录式组成框不容易推送该信息
CBN_EDITCHANGE:编写框的內容被客户更改了,与CBN_EDITUPDATE不一样,该信息是在编写框显示信息的文章正文被更新后才传出的,往下拉目录式组成框不容易推送该信息
CBN_ERRSPACE:组成框没法申请办理充足的运行内存来容下目录项
CBN_SELENDCANCEL:说明客户的挑选应当撤销,当客户在目录框选中择了一项,随后又在组成框控制外点击电脑鼠标时便会造成该信息的推送
CBN_SELENDOK:客户挑选了一项,随后按了回车键键或点击了下滚箭头符号,该信息说明客户确定了自身所做的挑选
CBN_KILLFOCUS:组成框丧失了键入聚焦点
CBN_SELCHANGE:客户根据点击或移动箭头符号键更改了目录的挑选
CBN_SETFOCUS:组成框得到了键入聚焦点
组成框控制的建立
MFC将组成框控制的全部实际操作都封裝来到CComboBox类中。
大家在会话框里加入组成框时,能够往会话框模版中拖进Combo Box控制,然后加上CComboBox种类的控制自变量应用,但假如大家想在程序中动态性建立得话,就需要应用CComboBox类的组员涵数Create了。Create涵数的原形以下:
virtual BOOL Create(
DWORD dwStyle,
const RECT rect,
CWnd* pParentWnd,
UINT nID
);
大伙儿能看出,CComboBox类的Create组员涵数同前边好多个控制类的Create组员涵数十分相近,dwStyle特定组成框控制的设计风格,rect为目录框弹出来后组成框的部位和规格,pParentWnd就是指向父对话框的指针,不可以为NULL,nID特定组成框控制的ID。最终還是关键讲下dwStyle主要参数。组成框控制的设计风格包含下列几类,并得出了相对表明:
CBS_AUTOHSCROLL:使编写框部件具备水准翻转的设计风格
CBS_DISABLENOSCROLL:使目录框不在必须翻转时显示信息一个严禁的竖直翻转条
CBS_DROPDOWN:特定一个往下拉式组成框
CBS_DROPDOWNLIST:特定一个往下拉目录式组成框
CBS_HASSTRINGS:特定一个带有标识符串的自绘式组成框
CBS_LOWERCASE:将编写框和目录框中的全部文字都全自动变换为小书写符
CBS_NOINTEGRALHEIGHT:组成框的规格由运用程序而并不是Windows 特定,一般,由Windows特定规格会使目录项的一些一部分掩藏起來
CBS_OEMCONVERT:使编写框部件中的文章正文能够在ANSI 标识符集和OEM标识符集中间互相变换。这在编写框中包括文档名时是很有效的
CBS_OWNERDRAWFIXED:特定自绘式组成框,即由父对话框承担绘图目录框的內容,而且目录项有同样的高宽比
CBS_OWNERDRAWVARIABLE:特定自绘式组成框,而且目录项有不一样的高宽比
CBS_SIIMPLE:特定一个简单组成框
CBS_SORT:全自动对目录框部件中的项开展排列
CBS_UPPERCASE:将编写框和目录框中的全部文字都全自动变换为英文大写标识符
dwStyle主要参数能够是之上设计风格的组成。跟别的控制一样,建立时一般也也要特定WS_CHILD、WS_VISIBLE、WS_TABSTOP和WS_VSCROLL等设计风格。
在会话框模版中立即加上组成框控制时,其特性页中的特性包括了之上设计风格,比如特性Uppercase设成True就非常于特定了CBS_UPPERCASE设计风格。
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则长短被限定为6553五个字节数。
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等。
CComboBox类运用案例
最终鸡啄米给大伙儿写一个简易的案例,表明CComboBox的好多个组员涵数及通告信息等的应用方式。此案例完成的作用:在组成框中包括一个网站目录,转换组成框控制的目录框选中择的目录项时,将新选定的目录项的文字显示信息到编写框中。下边是实际完成流程:
1. 建立一个根据会话框的MFC工程项目,名字设定为 Example25 。
2. 在全自动转化成的会话框模版IDD_EXAMPLE25_DIALOG中,删掉 TODO: Place dialog controls here. 静态数据文字控制、 OK 按键和 Cancel 按键。加上一个Combo Box控制,ID设定为IDC_WEB_COMBO,Type特性设成Drop List,为往下拉目录式组成框,编写框不容许客户键入,Sort特性设成False,以撤销排列显示信息。再加上一个静态数据文字控制和一个编写框,静态数据文字控制的Caption特性设成 您挑选的网站: ,编写框的ID设成IDC_SEL_WEB_EDIT,Read Only特性设成True。这时的会话框模版以下图:
3. boWeb。
4. 在会话框原始化时,大家将站训话添加到组成框中,并默认设置挑选第一项,那麼必须改动CExample25Dlg::OnInitDialog()涵数为:
C++编码 BOOL CExample25Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // Add About... menu item to system menu. // IDM_ABOUTBOX must be in the mand range. ASSERT((IDM_ABOUTBOX 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu- AppendMenu(MF_SEPARATOR); pSysMenu- AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here // 为组成框控制的目录框加上目录项 鸡啄米 &boWeb.AddString(_T( 鸡啄米 )); // 为组成框控制的目录框加上目录项 百度搜索 &boWeb.AddString(_T( 百度搜索 )); // 在组成框控制的目录框中数据库索引为1的部位插进目录项 新浪网 &boWeb.InsertString(1, _T( 新浪网 )); // 默认设置挑选第一项 &boWeb.SetCurSel(0); // 编写框中默认设置显示信息第一项的文本 鸡啄米 SetDlgItemText(IDC_SEL_WEB_EDIT, _T( 鸡啄米 )); return TRUE; // return TRUE unless you set the focus to a control }5. 大家期待在组成框选中中的目录项更改时,将全新的挑选项即时显示信息到编写框中,那麼这就需要采用CBN_SELCHANGE通告信息。为目录框IDC_WEB_COMBO的通告信息CBN_SELCHANGE加上信息解决涵数CExample25Dlg::OnCbnSelchangeWebCombo(),并改动以下:
C++编码 void CExample25Dlg::OnCbnSelchangeWebCombo() { // TODO: Add your control notification handler code here CString strWeb; int nSel; // 获得组成框控制的目录框选中中项的数据库索引 nSel =&boWeb.GetCurSel(); // 依据选定项数据库索引获得此项标识符串 &boWeb.GetLBText(nSel, strWeb); // 将组成框选中中的标识符串显示信息到IDC_SEL_WEB_EDIT编写框中 SetDlgItemText(IDC_SEL_WEB_EDIT, strWeb); }6. 运作程序,弹出来結果会话框,在会话框的组成框中更改挑选项时,编写框中的显示信息会相对更改。实际效果图以下:
组成框的內容便是这种了。相对性于CComboBox类总数很多的组员涵数来讲,这节的案例仅仅采用了非常少的好多个,大伙儿能够依据上边所说试一下别的的组员涵数。不太好热烈欢迎再次到鸡啄米来沟通交流探讨。
VS2010/MFC程序编写新手入门之二十四(常见控制:目录框控制ListBox) (:17)
VS2010/MFC程序编写新手入门之二十三(常见控制:按键控制的程序编写案例) (:59)
VS2010/MFC程序编写新手入门之二十二(常见控制:按键控制Button、Radio Button和Check Box) (:18)
VS2010/MFC程序编写新手入门之二十一(常见控制:编写框Edit Control) (:31)
VS2010/MFC程序编写新手入门之二十(常见控制:静态数据文字框) (:38)
VS2010/MFC程序编写新手入门之十九(会话框:色调会话框) (:10)
VS2010/MFC程序编写新手入门之十八(会话框:字体样式会话框) (:46)
VS2010/MFC程序编写新手入门之十七(会话框:文档会话框) (:21)
VS2010/MFC程序编写新手入门之十六(会话框:信息会话框) (:18)
VS2010/MFC程序编写新手入门之十五(会话框:一般特性页会话框的建立及显示信息) (:6)
网页链接(选填)
认证(*)
文章正文(*)(留言板留言最多篇幅:1000)
记牢我,下一次回应时无需再次键入本人信息内容
Copyright © 广州凡科互联网科技有限公司 版权所有 粤ICP备10235580号
全国服务电话:4000-399-000 传真:021-45545458
公司地址:广州市海珠区工业大道北67号凤凰创意园