MFC 组合框的使用
- 格式:doc
- 大小:43.50 KB
- 文档页数:6
AddString("1111">
VCMFC中的CComboBox控件使用详解VC/MFC中的CComboBox控件使用详解CComboBox控件详解CComboBox控件又称作组合框控件,其有三种形态可供选择,1.简单组合框(Simple)2.下拉组合框(Drop-down)3.下拉列表式组合框(Drop-down list).CComboBox控件的常用设置属性说明:type属性:里面一共有三个选项.就是其三种形式, 我们常用的是后两种形态,其区别就是Dropdown的编辑区为可编辑控件,而droplist 为静态控件.Data属性:当程序初始化的时候,下拉列表将显示其属性里面的内容,内容用分号分隔.其属性只支持后2中形式,Sort 属性:对添加到下拉列表框中的数据自动进行排序,如果你不想他改变你的显示序列,把他设置成False.控件是一个窗口.其基类是为CWnd.所以CComboBox也可以使用CWnd的一些函数,它自己的函数有30几种.我写了一个示范程序,演示了一些常用的函数,你可以参考其代码看到其功能.注:m_cbox 为CComboBox控件的关联变量,m_end为EDIT控件的关联变量1.GetCount() 函数:用以获得列表框中的选项数目. int GetCount() const;(此乃函数原型,我会列在每条的后面) 下面的例子是程序中各个按钮里面的代码int i;CString str;i=m_cbox.GetCount();str.Format ("%d",i);m_end="一共有"+str+"个数据";UpdateData(FALSE);2.GetCurSel() 函数:用以得到用户选中下拉列表框中数据的索引值.返回的值是重0开始的,如果没有选择任何选项将会返回-1 Int GetCurSel() constint i;CString str;i=m_cbox.GetCurSel ();str.Format ("%d",i+1);if (i==-1) m_end="你什么都没有选";else m_end="你选的是第"+str+"项";UpdateData(FALSE);3.SetCurSel函数:选取列表框中的一个选项,索引从0开始,-1为什么都不选.当你需要把列表框中已经选取的内容清空时就可以使用这个函数;if(m_i<3) m_cbox.SetCurSel (m_i++);//m_i为int型变量用以计数else {m_cbox.SetCurSel (-1);m_i=0;}4.SetEditSel函数:设置编辑区中蓝色选中字段的长度, BOOL SetEditSel( intnStartChar,int nEndChar ); nStartChar是起始的位置,当设置为-1时为不选择任何字段,nEndChar是结束位置.还有一个对应的函数GetEditSel是取得其位置,在此不详解.m_cbox.SetEditSel (3,5);//在编辑框中打入一串数字在按此按钮就能看到效果//其作用就是选中第3到第5个字符作为热点5.Clear() Cut() Paste() Copy() 这四个函数我放在一起说,因为他们都是针对编辑框中选定的文字进行编辑的函数,很多初学者很不明白这4个函数,使用这些函数没有作用,其实不然,这些函数对于在编辑框中的内容不进行处理,他真正处理的是你用鼠标选中的内容,对于Clear()函数很多书中解释都是有误的,很多书中对他的解释是清除当前选中的文本,我认为这样的解释是有歧异的,真正的解释是把你刚选中的文本释放掉,也就是不选,而不是把选中的删除,真正的删除选中的文本的函数是Cut(),Copy()是复制选中的文本,Paste()是粘贴到光标处.其演示就不写在程序中,有兴趣的朋友可以自己试试.6.LimitText()函数.其作用是限制在编辑框中键入的文本长度,BOOL LimitText(int nMaxChars); 当nMaxChars为0时,不是不能输入,而是长度最大化为65535字节7.GetLBText()函数.其原型为void GetLBText( int nIndex, CString&rString ).nIndex为列表框中数据的索引值,rString 为字符串,其作用就是把索引号为nIndex的数据放到rString变量中.与其对应的GetLBTextLen(intnIndex)函数就是得到索引号为nIndex中数据的长度m_cbox.GetLBT ext (2,m_end); // GetLBText按钮UpdateData(0);CString str; //GetLBTextLen按钮int i=m_cbox.GetLBTextLen (2);str.Format ("%d",i);m_end=str;UpdateData(FALSE);8.AddString() DeleteString() InsertString() ResetContent() 四个函数放在一起,他们都是针对下拉列表框的处理函数, AddString(LPCTSTR lpszString) 是在列表框的尾巴添加一条数据,参数为字符串. DeleteString(UINT nIndex)为删除指定索引为nIndex的数据. InsertString(int nIndex, LPCTSTR lpszString)在索引nIndex处插入IpszString的内容. ResetContent()是清除列表框中所有的内容.9.SetDroppedWidth(UINT nWidth) 函数.用于设定下拉列表框的最小宽度,当下拉列表框中的数据很长不能完全显示时,我们可以使用这个函数把列表框的宽度设置的大些.同样GetDroppedWidth()是返回列表框的宽度.以下为总结了各大论坛中对CCombBox控件使用的问题.并给出了正解.1.关于CComboBox在对话框中没有下拉项目的问题答: 资源编辑器中对话框中CComboBox组件的垂直范围拉大了下,就看见字体了,看到那个向下的黑箭头了吗,点他下拉,嘿嘿就这么简单.2.请问怎样能让CCombobox记住用户的输入.下次使用时还有答: 要记住用户的输入必须用到文件读写,或者把内容添加到注册表中,我会在以后给出解决办法.3. CCOMBOBOX如何使它只读,不能编辑答: 看了本文的介绍也许你现在知道了, CCOMBOBOX有三种类型的,选择你需要的吧!4. 我要让界面一显示,就能在Combo框中显示默认的数据答: 你要在OnInitDialog里面加上我上面所提到的SetCurSel()函数就行了.5. 如何把选好的内容赋给变量答: 先给CCOMBOBOX设置一个CString关联变量,再添加事件处理函数CBN_ Selchange.使用UpdateData(FALSE)就行了.6. 在CComboBox组合框中,条目的对齐方式是左对齐,能设置为对中或者右对齐吗?答: 没有直接的方法,你必须自己对齐, 比如最大长度是10int i;String.Format("%10d", i);CComboBox->AddStringVC combobox 使用大全 ---------------------------------------------------一、如何添加/删除Combo Box内容1. 在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。
MFC里组合框控件显示下拉列表现在正在帮一个大四的哥们做毕业设计。
需要设计一个MFC程序。
实现的功能是实现和GSM模块的通信。
也就是能够通过这个程序来收发短信。
这个功能很简单,短信的内容也是实现约定好的ASCII码(因为最终与GSM通信的不是手机,而是MCU控制的GSM模块),没有实现中文短信的功能。
编写的过程就是用VC++(我用的是VC6SP6)编写一个基于对话框的应用程序,在对话框里面添加MSComm控件,实现程序控制电脑串口的功能。
程序界面大致如下:实际运行的时候发现,这个程序只能运行在固定的串口号上面,如果把模块插在不同的usb口(串口号发生改变),这个程序就运行不正常了。
所以我就想在程序里面添加一个选择串口号的功能。
实现的方法如下:1.插入—>资源打开插入资源对话框,在里面选择dialog,然后点击新建,就会出现一个dialog资源。
2.双击这个资源,会出现让你添加一个类,这样添加一个类即可。
3.修改这个新建资源的界面,如下:然后再在父窗口里面的OnInitDialog()函数里面添加这样的代码:// TODO: Add extra initialization hereCChoseCom dlg; //CchoseCom是你新建资源添加的类的类名,父类是Cdialog dlg.DoModal();这样再编译一下(可能需要添加一下头文件,就include一下即可),运行结果会先出现这个串口选择对话框。
当然组合框的下拉列表内还没有内容。
所以下一步就是要添加内容。
4.在组合框里面添加选项。
首先打开类向导,在里面选择Message Maps选项页。
在里面现在CchoseCom类,控件ID是IDC_COMBO1(组合框控件),分别选择消息CBN_DROPDOWN和CBN_SELCHANGE添加消息响应函数。
CBN_DROPDOWN是当点击组合框的倒黑色小三角是触发的消息,CBN_SELCHANGE是选择好组合框的一个选项后触发的消息。
一、如何添加/删除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指明从那一行开始进行查找。
MFC——ComBox用法大全Combo Box (组合框)控件很简单,可以节省空间。
从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。
用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本。
下面的例子简要说明如何利用 MFC CComboBox Class来操作字符串列表。
1、定义控件对应变量假定已经创建了一个Dialog,并且从控件工具箱将 Combo Box 控件拖放到上面。
打开 Class Wizard,添加控件对应变量,如:CComboBox m_cbExamble;在后面的代码中会不断使用这个变量。
2、向控件添加 Items1) 在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。
换行用ctrl+回车。
2) 利用函数 AddString() 向 Combo Box 控件添加 Items,如:m_cbExample.AddString(“StringData1”);m_cbExample.AddString(“StringData2”);m_cbExample.AddStrin g(“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)。
MFC_基本控件使用MFC(Microsoft Foundation Classes)是一个用于基于 Windows 的应用程序开发的C++类库。
它提供了一套基本控件,使开发人员可以轻松地创建 Windows 应用程序的用户界面。
MFC提供了多种基本控件,用于显示和输入数据、与用户交互。
以下是一些最常见的基本控件及其用法:1. Button(按钮)控件Button 控件用于触发特定的操作或执行特定的功能。
创建 Button 控件的方法如下:```CButton myButton;myButton.Create("Click Me", WS_CHILD , WS_VISIBLE ,BS_PUSHBUTTON, CRect(10, 10, 100, 30), pParentWnd, ID_MYBUTTON);```其中,"Click Me" 是按钮的显示文本,WS_CHILD , WS_VISIBLE ,BS_PUSHBUTTON 是按钮的样式。
CRect(10, 10, 100, 30) 是按钮的大小和位置,pParentWnd 是按钮的父窗口,ID_MYBUTTON 是按钮的标识符。
Edit Control 控件用于接收用户输入的文本数据。
创建 Edit Control 控件的方法如下:```CEdit myEdit;myEdit.Create(WS_CHILD , WS_VISIBLE , WS_BORDER, CRect(10, 50, 300, 70), pParentWnd, ID_MYEDIT);```3. List Box(列表框)控件List Box 控件用于显示一个垂直列表,可以包含多个项。
创建 List Box 控件的方法如下:```CListBox myList;myList.Create(WS_CHILD , WS_VISIBLE , WS_BORDER ,LBS_NOTIFY, CRect(10, 90, 200, 200), pParentWnd, ID_MYLIST);```其中,WS_CHILD , WS_VISIBLE , WS_BORDER , LBS_NOTIFY 是列表框的样式。
VC2008在CMFCToolBar工具栏中加入组合框如何在CMFCToolBar工具栏中加入组合框等控件,且先看在线MSDN上怎么说的:To add a combo box button to a toolbar, follow these steps:1. Reserve a dummy resource ID for the button in the parent toolbar resource.2. Construct a CMFCToolBarComboBoxButton object.3. In the message handler that processes the AFX_WM_RESETTOOLBAR message, replace the dummy button with the new combo box button by using CMFCToolBar::ReplaceButton.具体过程如下:1.在工具栏资源编辑器中加入id为IDR_COM的空白工具栏,2.在头文件中定义组合框CMFCToolBarComboBoxButton* m_ComboButton;3.BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)中添加消息响应ON_REGISTERED_MESSAGE(AFX_WM_RESETTOOLBAR, OnToolbarReset)在头文件中声明消息函数:afx_msg LRESULT OnToolbarReset(WPARAM,LPARAM);在CMainFram中定义处理函数:LRESULT CMainFrame::OnToolbarReset(WPARAM wp,LPARAM lp){m_ComboButton = new CMFCToolBarComboBoxButton(IDR_COM,GetCmdMgr()->GetCmdImage (IDR_COM, FALSE));m_ComboButton->EnableWindow(true);m_ComboButton->SetCenterVert();m_ComboButton->SetDropDownHeight(25);m_ComboButton->SetFlatMode();m_ComboButton->AddItem(_T("OPTION1"));m_ComboButton->AddItem(_T("OPTION2"));m_ComboButton->SelectItem(0);m_wndT oolBar.ReplaceButton (IDR_COM, *m_ComboButton);return 0;}2、添加组合框的事件消息响应函数消息映射:ON_COMMAND(IDR_COM,&CMainFrame::OnClickComboBox)ON_CBN_SELCHANGE(IDR_COM,&CMainFrame::OnSelChan geClick)//别忘了在TOOLBAR中添加IDR_COM资源。
MFC ComboBox 使用方法Combo Box (组合框)控件很简单,可以节省空间。
从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。
用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本。
下面的例子简要说明如何利用MFC CComboBox Class来操作字符串列表。
1、定义控件对应变量假定已经创建了一个Dialog,并且从控件工具箱将Combo Box 控件拖放到上面。
打开Class Wizard,添加控件对应变量,如:CComboBox m_cbExamble;在后面的代码中会不断使用这个变量。
2、向控件添加Items1) 在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)。
MFC中combo下拉框的使用组合框控件简介组合框其实就是把一个编辑框和一个列表框组合到了一起,分为三种:简易(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类中。
MFC——ComBox用法大全Combo Box (组合框)控件很简单,可以节省空间。
从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。
用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本。
下面的例子简要说明如何利用 MFC CComboBox Class来操作字符串列表。
1、定义控件对应变量假定已经创建了一个Dialog,并且从控件工具箱将 Combo Box 控件拖放到上面。
打开 Class Wizard,添加控件对应变量,如:CComboBox m_cbExamble;在后面的代码中会不断使用这个变量。
2、向控件添加 Items1) 在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。
换行用ctrl+回车。
2) 利用函数 AddString() 向 Combo Box 控件添加 Items,如:m_cbExample.AddString(“StringData1”);m_cbExample.AddString(“StringData2”);m_cbExample.AddStrin g(“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)。
使用Windows标准控件我们在前面曾提到过,控件是一些行为标准化了的窗口,一般用于对话框或其它窗口中充当与用户交互的元素。
在Visual C++中,可以使用的控件分成三类:(1) Windows标准控件Windows标准控件由Windows操作系统提供,在Windows 95中还提供了一些新增的控件。
所有这些控件对象都是可编程的,我们可以使用Visual C++提供的对话框编辑器把它们添加到对话框中。
Microsoft基础类库(MFC)提供了封装这些控件的类,它们列于表6.1。
表6.1 Windows标准控件续表6.1前面提到过,在MFC中,类CWnd是所有窗口类的基类,很自然的,它也是所有控件类的基类。
Windows标准控件在以下环境下提供:•Windows 95•Windows NT 3.51及以后版本•Win32s 1.3•注意:•Visual C++ 4.2及以后版本不再支持Win32s。
(2) ActiveX控件ActiveX控件可用于对话框中,也可用于HTML文档中。
这种控件过去被称为OLE 控件。
本书将在专门的章节中来讲述关于ActiveX控件的知识。
这里仅指出ActiveX控件使用了与标准控件完全不同的接口和实现方法。
(3) 其它MFC控件类除了Windows标准控件和自己编写的或者来自于第三方软件开发商的ActiveX 控件以外,MFC还提供了另外三种控件,它们由下面的三个类进行封装:•类CBitmapButton用于创建以位图作为标签的按钮,位图按钮最多可以包括四个位图图片,分别代表按钮的四种不同状态。
•类CCheckListBox用于创建选择列表框,这种列表框中的每一项前面有一个复选框,以决定该项是否被选中。
•类CDragListBox用于创建一种特殊的列表框,这种列表框允许用户移动列表项。
在本章我们仅讲述第一类控件,即Windows标准控件。
所涉及的内容包括各个控件的使用及相应的技巧。
利用MFC编程在工具条中增加组合框控件Windows UI技术一直是程序设计人员尤其是用户接口程序设计人员最关心的技术。
显然新颖美观的界面会给用户留下深刻的印象。
Windows操作系统的流行也在于其用户界面的不断创新与改进。
Office 97、Visual Studio 97、Outlook、IE等每一个新的软件的推出都能够给人新的感觉。
尤其是这些软件工具条十分丰富美观,如3D形式的工具条、飞行Tips,这些小技巧既富于吸引力,又方便了使用者。
我们知道,Visual C++所提供的标准工具条中基本上只有一些简单的诸如文档打开、存储以及一些编辑功能按钮,而VisualC++自身的工具条功能十分丰富,尤其是工具条中内嵌的组合框控件十分方便。
实际上利用MFC编程在工具条中增加一些有趣的控件还是比较容易的,下面我们就谈谈如何利用MFC编程在工具条中增加组合框控件。
1 创建AppWizard工程文件设为toolbar,采用系统缺省设置。
2 打开资源编辑器,选择工具条,在工具条中增加一个按钮,设置按钮ID为ID_MY_COMBO_BOX。
移动该按钮以使按钮处于适当的位置。
3 从CToolBar派生出一个新类CMyToolBar,在CMyToolBar类中增加一个成员变量m_wndMyComboBox,代码如下:classCMyToolBar : public CToolBar{public:CComboBoxm_wndMyComboBox;};注意要将代码放在工程文件mainframe.h中“#endif // _MSC_VER > 1000”语句之后,类CMainFrame定义之前。
4 将工程文件mainframe.h中的CToolBar变量m_wndToolBar用CMyToolBar 变量m_wndToolBar代替。
同时增加函数CreateMyComboToolBar()声明。
代码如下:protected: // control bar embedded membersCStatusBarm_wndStatusBar;CMyToolBarm_wndToolBar;intCreateMyComboToolBar();5 在工程文件mainframe.cpp中的OnCreate()函数返回语句之前调用函数CreateMyToolBar();代码如下所示:if(!CreateMyComboToolBar())MessageBox("Create My Combo ToolBar Failure");6 以文本方式打开资源头文件resource.h,增加一个控制ID如下,注意该控制的ID值不要与其它控制或资源的ID值重复:#define IDC_MY_COMBO 11117 在工程文件mainframe.cpp中增加函数CreateMyToolBar();代码如下:intMainFrame::CreateMyToolBar(){#define COMBO_BOX_WIDTH 80 //the width of the combo box//set up the ComboBox control as a select box//First get the index of the button'sposition in the toolbarint index = 0;CRecrrect;while(m_wndToolBar.GetItemID(index)!= ID_MY_COMBO_BOX) index++;//next convert that button to a seperator and get its position m_wndToolBar.SetButtonInfo(index,ID_MY_COMBO_BOX,TBBS_SEPARATOR, COMBO_BOX_WIDTH);m_wndToolBar.GetItemRect(index, &rect);//expand the rectangle to allow the combo box room to drop down rect.top+=2;rect.bottom += 200;// then .Create the combo box and show itif (!m_wndToolBar.m_ wndMyComboBox.Create(WS_CHILD|WS_VISIBLE | CBS_AUTOHSCROLL |CBS_DROPDOWNLIST | CBS_HASSTRINGS ,rect, &m_wndToolBar, IDC_MY_COMBO)){TRACE0("Failed to create combo-box\n");return FALSE;}m_wndToolBar.m_wndMyComboBox.ShowWindow(SW_SHOW);//adding string to the combo boxm_wndToolBar.m_wndMyComboBox.AddString("Fisrt Select");m_wndToolBar.m_wndMyComboBox.AddString("Second Select");m_wndToolBar.m_wndMyComboBox.AddString("Third Select");m_wndToolBar.m_wndMyComboBox.AddString("Fourth Select");m_wndToolBar.m_wndMyComboBox.AddString("Fifth Select");m_wndToolBar.m_wndMyComboBox.SetCurSel(0);}编译并运行该应用,就会发现工具条中多了一个组合框控件。
MFC之ComboBox控件⽤法实例教程本⽂以实例形式较为详细的讲述了MFC中ComboBox控件的⽤法。
分享给⼤家供⼤家参考之⽤。
具体⽅法如下:⼀、ComboBox简介: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选项为combo box的默认选项.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); //查找下拉列表中是否是哪个选项包含字符串tempif(n>=0){cbBox.SetCurSel(n); //查找到的话就把选项名字显⽰在⽂本框中}4.删除选项删除所有选项,也可以把下拉列表置空cbBox.ResetContent();删除某个选项.只能先查找到对应的索引号,再根据索引号删除int index = cbBox.FindStringExact(0,_T("three"));cbBox.DeleteString(index);5.禁⽌在ComboBox中输⼊有时候我们希望只能在下拉框中选择,⽽不允许在ComboBox中输⼊。
MFC控件使用大全Static Text1. 透明背景、改变文本的字体颜色最好做法当然是继承CStatic然后重载OnPaint(),完全自己来画,这样能够获得最大的灵活性,但是比较麻烦。
可以使用以下方便的方法:同样创建一个CStatic的派生类,处理父窗口的反射消息WM_CTLCOLOR,即添加HBRUSH CtlColor(CDC *pDC, UINT nCtlColor)这个消息映射函数。
注意,不是HBRUSH OnCtlColor(CDC *pDC, CWnd *pWnd, UINTnCtlColor)!其实还有一个方法,就是处理父窗口的OnCtlColor(),更简单一点,但是不符合封装的原则。
HBRUSH CStatic_bg_color_sizeDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: 在此更改 DC 的任何特性if (nCtlColor == CTLCOLOR_STATIC){pDC->SetBkMode(TRANSPARENT); // 设置透明背景pDC->SetT extColor(RGB(0, 0, 255)); // 设置文本颜色return (HBRUSH)GetStockObject(HOLLOW_BRUSH); // 返回透明画刷}return hbr;}-------------------------------------------------------------------------------------------------通过上述代码,就可以得到彩色的文本以及透明的背景,但是,还存在一个问题,当该Static控件的文本内容或者属性,在运行过程中发生变化的时候,由于背景一直没有擦除(为了实现透明),会出现重影,导致文本模糊成一团。
MFC框架的介绍与应用MFC(Microsoft Foundation Class)是一种基于C++的编程框架,用于开发Windows应用程序。
该框架是微软推出的一种基于消息机制的图形用户界面(GUI)框架,旨在简化Windows应用程序开发的复杂度。
下面将介绍MFC框架的基本组成和应用。
一、MFC框架的基本组成MFC框架由多个类库组成,包括应用框架、控件库、GDI(图形设备接口)和基础设施库等。
其中,应用框架是构成整个应用程序的基础,控件库提供了大量可视化元素,GDI和基础设施库则为开发人员提供了强大的图形处理能力。
1. 应用框架应用框架是MFC框架的核心,包括了窗口管理、消息处理、应用程序生命周期等一系列功能。
在应用程序开发过程中,开发人员需要继承CWinApp类,该类提供了应用程序的生命周期管理、初始化、清理等操作,使应用程序能够顺利运行。
2. 控件库控件库是MFC框架中最为重要的组件之一,提供了丰富的可视化元素,如按钮、文本框、标签等等。
开发人员可以在应用程序中使用这些控件,实现丰富的用户界面交互。
同时,控件库还提供了许多高级控件,例如Tree Control、List Control等,支持各种不同的交互方式,大大增强了用户的操作体验。
3. GDIGDI是图形设备接口,是MFC框架中最为重要的图形处理组件。
它提供了许多图形操作API,支持诸如绘制、渲染等操作,还支持丰富的图像格式转换、裁剪等操作。
开发人员可以使用GDI轻松操作图形,实现各种复杂的图形效果。
4. 基础设施库基础设施库是MFC框架中提供的帮助开发人员快速开发业务处理的组件,例如数据库操作、网络通信、多线程编程等。
它提供了各种常用的工具类和函数,帮助开发人员编写高效、易维护的代码。
二、MFC框架的应用MFC框架的应用范围广泛,可以用于开发许多不同类型的软件,例如桌面应用程序、图形处理软件、嵌入式软件等。
下面将以桌面应用程序为例,介绍MFC框架的应用实例。
PWIN98/95下演练VC5中的COMMON一族辽宁省铁岭市委办公室(112000)宋立波中文PWIN98/95之所以深受广大计算机用户的青睐,除其在32位多任务、多线程和系统稳固性等核心技术的重要改进之外,更主要的还是其优秀的用户交互界面。
这就给程序设计人员提出了新的课题,如何在自己开发的应用程序中充分利用WIN98/95支持的各种高级通用控制和视,这也是学习VC编程所必须掌握的基本内容,本文将通过实例来具体演练VC5中的这些控件,其中常用的COMMON一族主要成员包括:1.表头控制 Header Control2.图像列表控制 Image List3.列表控制和视 List Control&List View4.树控制和视 Tree Control&Tree View5.标签控制和视 Tab Control&Tab View6.工具条控制 Toolbar Control7.进度条控制 Progress Control8.滑动条控制 Slider Control9.旋转按钮控制 Spin Button Control10.状态条控制 Status Bar Control其中,绝大部分通用控制在MFC类库中都存在两种封装形式,即控制类和视类,控制类主要是供直接使用控制而提供的,而视类则是通过间接使用控制而提供的,视类可以更好地把控制类集成到MFC结构中,并且使用视类可以利用引用直接对嵌套在其中的控制进行各种操作。
两者在使用方法上没有太大区别,就拿列表控制类和视类来说,当创建列表视后可通过CListCtrl& ctrlList = GetListCtrl()成员函数取得视类引用ctrlList之后,就可以利用列表视的视函数对视进行各项操作(ctrlList.Add等)。
一、PWIN98/95下演练CHeadCtrl表头控制(CHeaderCtrl)通常应用在窗口中的文本或数据的列表之上。
MFC中组合框的使用GetDlgItem(IDC_COMBO1)->SetWindowText("请点击选择");//文本框((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("1111");//下拉框位置是0 ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("2222");//下拉框位置是1 GetDlgItem(IDC_COMBO1)->SetWindowText("请点击选择");//文本框((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("1111");//下拉框位置是0 ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("2222");//下拉框位置是1---------------------------------------------------------------------------------一、如何添加/删除Combo Box内容 (1)二、如何控制Combo Box的下拉长度 (2)三、选择其中的某行 (2)int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel();//当前选中的行。
(3)四、取得Combo Box框内容 (3)五、获得焦点 (3)MFC Combo Box(组合框)控件的用法收藏一、如何添加/删除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_V ALUE2))//判断焦点是否在编辑框IDC_EDIT_V ALUE2内。
但是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 GetLBT ext( int nIndex, LPTSTR lpszT ext )得到列表框内指定行的字符串。
此外通过调用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_EDITUPDA TE 输入框中内容被更新使用以上几种消息映射的方法为定义原型如: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_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="Line1";m_cbeWnd.InsertItem(&insItem);insItem.iItem=1;insItem.iImage=1;insItem.pszText="Line 2";m_cbeWnd.InsertItem(&insItem);通过调用int DeleteItem( int iIndex );来删除行,并指明行的位置。