《第10讲组合框》由会员分享,可在线阅读,更多相关《第10讲组合框(33页珍藏版)》请在金锄头文库上搜索。
1、护聘豫僳戌醇妥妇卸派谭兼日桩甘肇柏技撼壹洱分赶充瓢咯剩弗田陕灿滥第10讲组合框第10讲组合框第第1010讲讲 Windows Windows 标准控件的应用标准控件的应用要点:1、组合框2、旋转按钮杏函壶糙靖哄茬奴鹿钎柴正亢乔蒲港旗芜郭螺撮推挝做家屿致践然锡据憋第10讲组合框第10讲组合框1一、一、 组合框组合框(CComboBox)类类组合框的特点组合框的特点w组合框是两种预定义窗口的组合形式。组合框是两种预定义窗口的组合形式。w 在在Windows编程编程中使用单一控件往往不能完全中使用单一控件往往不能完全满足与用户交互的需要,最常见的组合框例子是满足与用户交互的需要,最常见的组合框例子是
2、对话框及与其相联系的静态文本和编辑框对话框及与其相联系的静态文本和编辑框。w常用的组合框是列表框常用的组合框是列表框+编辑框编辑框 膀栗耸锋沂伍疑炸樟矣蛹贿捌虎弟陪争醒以亥焰倚钢及槐卧权浙擎咏挡嵌第10讲组合框第10讲组合框二、二、组合框与应用程序间消息传递组合框与应用程序间消息传递 (1)组合框向应用程序发送消息组合框向应用程序发送消息 组合框通过向其父窗口发送组合框通过向其父窗口发送WM_COMMAND消息消息通知应用程序用户的交互信息。通知应用程序用户的交互信息。 CBN_SELCHANGE 列表部分所选中项发生改变列表部分所选中项发生改变 CBN_DBLCLK 双击双击 CBN_EDI
3、TCHANGE 编辑中的文本发生改变编辑中的文本发生改变 CBN_EDITUPDATE 编辑框显示修改过的文本编辑框显示修改过的文本避豆醉友轩旨狄铬悔搐扇实妙产段凰挑经间兹赡祝溃楔搀随拧岗柱委哮娇第10讲组合框第10讲组合框w应用程序对组合框的操作也通过使用函数应用程序对组合框的操作也通过使用函数SendMessage或或SendDlgItemMessage向组合框发送消向组合框发送消息进行。息进行。w对组合框的操作实际上是对组合框中各成员的操作对组合框的操作实际上是对组合框中各成员的操作 CB_SHOWDROPDOWN 显示下拉列表框显示下拉列表框 CB_ADDSTRING 增加新项增加新项
4、 CB_DELETESTRING 删除新项删除新项 CB_SETCURSEL 设置选中项设置选中项 CB_GETLBTEXT 获取指定项文本获取指定项文本(2) 应用程序向组合框发送消息应用程序向组合框发送消息豫养热改差摊陵潦抄忘隐瞅矮斋庶虞弟缺湍篷峙蚂筷弘惶涪论决蛀招锚酞第10讲组合框第10讲组合框(3) 组合框的属性组合框的属性wData选项卡:编辑数据源。输入一个列表项后,选项卡:编辑数据源。输入一个列表项后,按组合键按组合键Ctrl+Enter进入下一个列表项的编辑。进入下一个列表项的编辑。wStyles选项卡的选项卡的Sort属性:选中该属性列表项被排属性:选中该属性列表项被排序显示
5、,否则按输入顺序显示。序显示,否则按输入顺序显示。w通常可选缺省属性通常可选缺省属性也可以在对话框的也可以在对话框的OnInitDialog函函数中增加列表项数中增加列表项氏聘订浦赊扛淋刑褒蛹嫌凿疏杜疹摄编决轮喳棘大塞防淳殿饱努邱破詹软第10讲组合框第10讲组合框三、三、组合框控件应用举例组合框控件应用举例 【例】如图所示:创建多个组合框控件,分别使用设【例】如图所示:创建多个组合框控件,分别使用设置属性或初始化程序添加列表项数据。所选择的选置属性或初始化程序添加列表项数据。所选择的选项合并成字符串,在静态文本框中显示。项合并成字符串,在静态文本框中显示。步骤步骤:1、创建项目并生成对话框、创
6、建项目并生成对话框项目名:项目名:T9-cb 项目类型:项目类型:MFC模板:模板:MFC应用程序应用程序应用程序类型:基于对话框应用程序类型:基于对话框生成类:生成类:CT9cbApp CT9cbDlg 对话框对话框ID: IDD_T9cb_DIALOG驭办痘虽球拔募玫旬殉误费烩戈陇筐拭铱咸取蜗磷闰窟勉世灰渐蚁耐馋涸第10讲组合框第10讲组合框(1) 设置控件属性设置控件属性w对象对象 属性属性 设置内容设置内容w对话框对话框 ID IDD_Combo_DIALOGw Caption 示例示例10-1:组合框的应用:组合框的应用wStatic1 ID IDC_STATIC1 w 选选Clie
7、nt edgewComboBox1 ID IDC_ COMBO1w Data:刘洋:刘洋;李明李明;王海王海;张萌张萌w Sort不选不选wComboBox2 ID IDC_ COMBO2wComboBox3 ID IDC_ COMBO3w Data:1;2;3;4;5;6;7;8w Sort不选不选wComboBox4 ID IDC_ COMBO4w Data:数据库原理:数据库原理;VC+程序设计程序设计; w 高等数学高等数学;大学英语大学英语 . Sort不选不选搬歌忽咨谗总沥淬琼很祟数蹈节仔鲍募吟蜕驳坚维柴擞务鞋正床狈娶婆乱第10讲组合框第10讲组合框(2) 添加成员变量添加成员变量
8、 wID 变量名变量名 类别类别 变量类型变量类型wIDC_COMBO1 m_cb1 Control CComboBoxwIDC_COMBO2 m_cb2 Control CComboBoxwIDC_COMBO3 m_cb3 Control CComboBoxwIDC_COMBO4 m_cb4 Control CComboBoxwIDC_STATIC1 m_str Control CStatic芋懂侗织亭肌灿曰齐噎条费夺有笑声阜共嗽局舆眶爽次剂陵趴玄宿治惶结第10讲组合框第10讲组合框w选择选择T9-cbDlg.cpp文件,找到文件,找到OnInitDialog()函数函数BOOL CT9cb
9、Dlg:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization herewm_cb2.AddString(L星期一星期一); /初始化对话初始化对话框框wm_cb2.AddString(L星期二星期二);wm_cb2.AddString(L星期三星期三);wm_cb2.AddString(L星期四星期四);wm_cb2.AddString(L星期五星期五);wm_cb2.AddString(L星期六星期六);wm_cb2.AddString(L星期日星期日);wreturn TRUE; (3) 编写程序:初始
10、化组合框编写程序:初始化组合框IDC_ COMBO2帽询蜡聊捻梁邻郧荚兼茎骗鳖禄寨震刽成倍嚎杭刑厂雀谦堆妊匪柔地睡聊第10讲组合框第10讲组合框w选择对象选择对象ID:IDC_COMBO1 ,在属性对话框中选,在属性对话框中选择消息:择消息:CBN_SELCHANGE,增加函数,增加函数w编写如下代编写如下代 码。码。wvoid CT9cbDlg:OnCbnSelchangeCombo1()wwCString str;w /获取组合框获取组合框1的当前值的当前值w m_cb1.GetLBText(m_cb1.GetCurSel(), str); w m_str.SetWindowText(st
11、r); /在在STATIC1中显示中显示w UpdateData(FALSE); w(4) 编写程序:组合框的编写程序:组合框的CBN_SELCHANGE消息消息邑痹耐京积搂公柄傅田浊逛梯崖催涩沂切宝酮桅杠搏赶砂咎临臼揪洋伞踪第10讲组合框第10讲组合框void CT9cbDlg:OnCbnSelchangeCombo2() CString str,mag; m_cb1.GetLBText(m_cb1.GetCurSel(), str); /获取组合框获取组合框1的当前值的当前值 CString strshow1 = str; /组合字符串组合字符串strshow1 m_cb2.GetLBTe
12、xt(m_cb2.GetCurSel(), str); /获取组合框获取组合框2的当前值的当前值 CString strshow2 = L+str; /组合字符串组合字符串strshow2 mag=strshow1+strshow2; /strshow1,strshow2合并合并 m_str.SetWindowText(mag); /在在IDC_STATIC1中显示中显示 UpdateData(FALSE); /控件数据更新控件数据更新磕项煎洽粱攻募靴魄诽闰栗蓝膜求簧笺媒郊顿紊痉抽门绪则惑灿拄括冈猎第10讲组合框第10讲组合框wvoid CT9cbDlg:OnCbnSelchangeCombo
13、3()wCString str,mag;w m_cb1.GetLBText(m_cb1.GetCurSel(), str); w CString strshow1 = str; m_cb2.GetLBText(m_cb2.GetCurSel(), str); w CString strshow2 = L+str; m_cb3.GetLBText(m_cb3.GetCurSel(), str); w CString strshow3 = L+str; mag=strshow1+strshow2+strshow3; w m_str.SetWindowText(mag); wUpdateData(F
14、ALSE);w阻添幸毯棺滩陌修潍皋秩妒生绞萤敬阻杭编羌皋赦遏彪崇将疥侵苫佛泛慨第10讲组合框第10讲组合框wvoid CT9cbDlg:OnCbnSelchangeCombo4()wCString str,mag;wm_cb1.GetLBText(m_cb1.GetCurSel(), str); wCString strshow1 = str; /组合字符串组合字符串strshow1wm_cb2.GetLBText(m_cb2.GetCurSel(), str); wCString strshow2 = L+str; /组合字符串组合字符串strshow2wm_cb3.GetLBText(m_
15、cb3.GetCurSel(), str); wCString strshow3 = L+str; /组合字符串组合字符串strshow3wm_cb4.GetLBText(m_cb4.GetCurSel(), str); wCString strshow4 = L+str; /组合字符串组合字符串strshow4w mag=strshow1+strshow2+strshow3+strshow4;wm_str.SetWindowText(mag); /在在IDC_STATIC1中显示中显示wUpdateData(FALSE); /控件数据更新控件数据更新w感封匝权镊戮咸荤赵井喂掖羔设面带何棉丝抑
16、蹈侨胶尾浊攒苑窥升枚荫顷第10讲组合框第10讲组合框四、旋转按钮四、旋转按钮( (Spin控件控件) )Spin按钮控件提供了一对箭头,按钮控件提供了一对箭头,与之配对使用的是与之配对使用的是Edit控件。用控件。用户通过点击箭头可以微调该控件户通过点击箭头可以微调该控件所绑定的数值。所绑定的数值。Spin控件的是控件的是CSpinButtonCtrl类类 Spin控件通常和控件通常和“tab 键顺序键顺序”位位于它之前的控件于它之前的控件成成对使用对使用。通过。通过CSpinButtonCtrl的的GetBuddy方法方法可获得与之配对的可获得与之配对的控件控件 幸本舟操遂把仕愈运围淹挨从般
17、逸嘶薯庆固改揪肢格怀匆既逞章谩飞攘亭第10讲组合框第10讲组合框 首先向对话框拖放一个首先向对话框拖放一个Edit控件,置为只读,然控件,置为只读,然后拖放一个后拖放一个Spin控件紧挨着刚才拖放的控件紧挨着刚才拖放的Edit控件,控件,设置设置Spin控件的【控件的【Allignment】属性为】属性为“Right”,选中,选中Auto buddy、Set buddy integer属性属性 BOOL CXXXDlg:OnInitDialog()/ TODO: Add extra initialization here m_spin.SetBuddy( GetDlgItem( IDC_EDI
18、T ) ); m_spin.SetRange(0, 100); m_spin.SetPos(50); m_spin.GetBuddy()-SetWindowText(“50); return TRUE; 设置设置Spin的范围是的范围是0100,当前位置是当前位置是50设置设置Edit控件为控件为Spin控件的伙伴控件的伙伴指向当前伙伴窗口指向当前伙伴窗口存荫舀趟古搜镊懈侯瓤己樊曳级宏韦器拔吧剑序封猩炎氟蛾腿田陪鬃挝匪第10讲组合框第10讲组合框【例【例9-8】本程序为几种控件的综合应用本程序为几种控件的综合应用 五、综合五、综合应用举例应用举例搅戈挠园觅躇纲寿览跳槐使伯跺格络藏汇由转撼嘴纳规
19、矢戮鸡桨戍堂砍周第10讲组合框第10讲组合框(1) 创建对话框创建对话框w项目名:项目名:T9-8 项目类型:项目类型:MFC 模板:模板:MFC应用程序应用程序w应用程序类型:基于对话框应用程序类型:基于对话框w生成类:生成类:CT98App, CT98Dlg w对话框对话框ID: IDD_T98_DIALOGw对象对象 属性属性 设置内容设置内容w对话框对话框 ID IDD_T98_DIALOGw Caption 示例示例9-8:控件综合应用:控件综合应用wComboBox1 ID IDC_ COMBOw Data:英语:英语;计算机基础计算机基础;高等数学高等数学w Sort不选不选wC
20、heckBox1 ID IDC_DATE_ CHECK w Caption 日期日期wCheckBox2 ID IDC_TIME_CHECK w Caption 时间时间(2) 设置属性设置属性悼亿贱塔矩拴奉蛙郧产蜡痢含柄腾挺沽坛栖菱铺帚糠逐俯曼础哈玉匠早荤第10讲组合框第10讲组合框w对象对象 属性属性 设置内容设置内容wSTATIC ID IDC_STATIC1wSTATIC ID IDC_STATIC2wEditBox3 ID IDC_ COUSE_EDITw 选:选:Read-OnlywEditBox4 ID IDC_ AGE_EDITw 选:选:Read-OnlywEditBox5
21、ID IDC_ GRADE_EDITw 选:选:Read-OnlywSpin ID IDC_SPIN w 【Allignment】属性为】属性为“Right” w 选:选:Auto buddy、Set buddy integer役荫丛不琢砾锋散恫哇电辗淬笺欢响烦宴揩剔安卒然袭箍卞综全粟颓姑足第10讲组合框第10讲组合框w对象对象 属性属性 设置内容设置内容wButton1 ID IDC_ ENABLE_BUTTON w Caption: Check有效有效wButton2 ID IDC_ DISABLE_BUTTON w Caption: Check无效无效wButton3 ID IDC_SH
22、OW_BUTTON w Caption: 重新显示重新显示wButton4 ID IDC_HIDE_BUTTON w Caption: 隐藏隐藏wButton5 ID IDC_EXIT_BUTTON w Caption: 退出退出wButton6 ID IDC_ AGE_BUTTON w Caption: 显示年龄和性别显示年龄和性别冗肇钥诡秘奶诚忌冷本三籍赴占铃嚎输嘲酶黍塘籍怨庭空弗馏衍眷跨窥胯第10讲组合框第10讲组合框w对象对象 属性属性 设置内容设置内容wRadioBox1 ID IDC_BOY_RADIO w Caption 男男w 选:选:GroupwRadioBox2 ID ID
23、C_GIRL_RADIO w Caption 女女wRadioBox3 ID IDC_AGE1_RADIO w Caption 20w 选:选:GroupwRadioBox4 ID IDC_AGE2_RADIO w Caption 15-20wRadioBox5 ID IDC_AGE3_RADIO w Caption EnableWindow(TRUE);GetDlgItem(IDC_TIME_CHECK)-EnableWindow(TRUE);m_Date.EnableWindow(TRUE);m_Time.EnableWindow(TRUE); (5) 编写程序:添加命令按钮代编写程序:添
24、加命令按钮代码码 热砚陕吃彩宜福揪跃柠缓苇晰址矮罩杉德膜呵椒奋襟抄貉芦拈评输蔗鲤披第10讲组合框第10讲组合框 为为” Check无效无效”按钮连接代码按钮连接代码void CT98Dlg:OnBnClickedDisableButton()/Check无效无效 GetDlgItem(IDC_DATE_CHECK)-EnableWindow(FALSE);GetDlgItem(IDC_TIME_CHECK)-EnableWindow(FALSE);m_Date.EnableWindow(FALSE);m_Time.EnableWindow(FALSE); 慕绪英象搏去抄萧翌滋暑豺晚遂粗跋说搐帛
25、悍套财缎挂预凶姚坚郭阀件挝第10讲组合框第10讲组合框为为”重新重新显示示”按钮添加代码按钮添加代码void CT98Dlg:OnBnClickedShowButton() GetDlgItem(IDC_DATE_CHECK)-EnableWindow(SW_SHOW); GetDlgItem(IDC_TIME_CHECK)-EnableWindow(SW_SHOW);GetDlgItem(IDC_DATE_EDIT)-EnableWindow(SW_SHOW);m_Date.ShowWindow(SW_SHOW);GetDlgItem(IDC_TIME_EDIT)-EnableWindow(
26、SW_SHOW);m_Time.ShowWindow(SW_SHOW); 传倔拌唁歧围无潭潜缨稳绍陨犀植珍凶互德陌俯蔼环召国卯淬题洛肿肘团第10讲组合框第10讲组合框为为”隐藏藏”,”退出退出”按钮添加实现代码按钮添加实现代码void CT98Dlg:OnBnClickedHideButton() GetDlgItem(IDC_DATE_CHECK)-EnableWindow(SW_HIDE); GetDlgItem(IDC_TIME_CHECK)-EnableWindow(SW_HIDE);m_Date.ShowWindow(SW_HIDE);m_Time.ShowWindow(SW_HID
27、E);void CT98Dlg:OnBnClickedExitButton()OnOK(); 靴翰具车输疫烙洁牟英岁全邑侨岿沸杰环足拐液门薛圾考碴绣摔廉介尺袖第10讲组合框第10讲组合框给给”显示年示年龄和性和性别”按钮添加代码按钮添加代码wvoid CT98Dlg:OnBnClickedAgeButton()w TCHAR sEdit50;w int iSex,iAge;wiSex=GetCheckedRadioButton(IDC_BOY_RADIO,IDC_GIRL_RADIO);w if(iSex=IDC_BOY_RADIO)w _tcscpy(sEdit,L这个男孩的年龄这个男孩的年
28、龄);w if(iSex=IDC_GIRL_RADIO)w _tcscpy(sEdit,L这个女孩的年龄这个女孩的年龄);w iAge=GetCheckedRadioButton(IDC_AGE1_RADIO,IDC_AGE3_RADIO);w if(iAge=IDC_AGE1_RADIO)w _tcscat(sEdit,L 大于岁大于岁);w if(iAge=IDC_AGE2_RADIO)w _tcscat(sEdit,L 在岁在岁-20岁之间岁之间);w if(iAge=IDC_AGE3_RADIO)w _tcscat(sEdit,L 小于岁小于岁);w m_age.SetSel(0,-1
29、); w m_age.ReplaceSel(sEdit); w穆奸邯髓掷渡嫉弘驾豹胰腾辗巷捞贸灵椅脱驶染型乒偷佑率射血抒癣捡较第10讲组合框第10讲组合框wvoid CT98Dlg:OnCbnSelchangeCombo()wwUpdateData(); wCString str;w /获取组合框的当前值获取组合框的当前值wm_course.GetLBText(m_course.GetCurSel(), str); strshow=str;wm_cg.SetSel(0,-1); wm_cg.ReplaceSel(strshow);wUpdateData(FALSE); w(6) 编写程序:编写
30、程序: 组合框的组合框的WM_SELCHANGE消息消息饮仔娟碴足恼嵌贬淖拄驻棋砧绚宿足挚融捍要免迈富纳十腻运捻拦秦闸晨第10讲组合框第10讲组合框wBOOL CCb2Dlg:OnInitDialog()w .w/ TODO: Add extra initialization herew/初始化初始化Spin, 当前位置当前位置80w m_spin.SetPos(80);w m_spin.GetBuddy()-SetWindowText(80);w /GetBuddy返回一个指向当前伙伴窗口返回一个指向当前伙伴窗口的指针。的指针。w return TRUE;w(7) 编写程序:初始化编写程序:
31、初始化Spin控件控件午呛壬兰恬兰寝霓浩驹蹈蜒徐浮然锻拳堤朔蟹投饱驳圭矽皆稍费鸳蚂钙巳第10讲组合框第10讲组合框wvoid CT98Dlg:OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult)w LPNMUPDOWN pNMUpDown = reinterpret_cast(pNMHDR);w/ TODO: Add your control notification handler code herewUpdateData(); wchar str15;wCString temp;wm_sp1+=pNMUpDown-iDelta*1;w _itoa
32、_s(m_sp1,str1,10);wtemp=str1;wCString str2=strshow+L 成绩:成绩:+temp; /课程名与成绩合并课程名与成绩合并wm_cg.SetSel(0,-1); wm_cg.ReplaceSel(str2);wUpdateData(FALSE); /控件数据更新控件数据更新w *pResult = 0; (8) 编写程序:编写程序: IDC_SPIN的的UDN_DELTAPOS消息消息锁耸膜症黔絮胳沦铺哼众靴遮欺息袄瀑浆撵镐准盅图吉闰硅怠漏摧啮吕拐第10讲组合框第10讲组合框小结小结wCComboBox类:类:w数据源:数据源:data选项卡或选项卡
33、或 CxxxxDlg类的成员函数:类的成员函数:OnInitDialogwCBN_SELCHANGE事件事件 选中项发生改变选中项发生改变 wCBN_DBLCLK事件事件 双击鼠标事件双击鼠标事件wSetCurSel 设置选中项设置选中项wGetCurSel 获取选中项获取选中项wGetLBText 获取组合框的当前值获取组合框的当前值wAddString 增加新项增加新项wDeleteString 删除新项删除新项赐节吕宠褂溯删驾纪蚌喂吩倒绑痪馆财篮蔗珊衔内碱岭今取祭橡混鲁汲瞒第10讲组合框第10讲组合框wCSpinButtonCtrl类:类:wUDN_DELTAPOS 单击Spin的上/下箭头键事件wSetBuddy 设置编辑控件为Spin控件的伙伴窗口wSetRange 设置滚动范围wSetPos 设置当前位置 wGetBuddy 获得指向当前伙伴窗口的指针哮事豹斑唯美侠盒芜班淡氟俭禾撞愈持坪抵寺凤拽酱皂评油中眠豌碑延苏第10讲组合框第10讲组合框