1、实验12实验12按钮控件、静态控件、编辑框和旋转按钮控件目的要求1熟悉基于对话框程序设计的步骤。2熟悉对话框编辑器的使用。3掌握按钮控件、静态控件的创建和代码的添加方法。4熟悉编辑框控件的创建方式。实验1 按钮控件和静态控件实验内容使用应用程序向导创建一个基于对话框的应用程序ButtonTest,界面如图12.1所示, 界面上有两组不同的复选框信息,一组单选框信息,提供给用户选择,当用户作出选择后,单击【获取结果】按钮,能在右边的编辑框区域显示出选中的信息。图12.1 程序运行结果实验步骤1.启动Visual C+6.0,利用MFC向导建立一个基于对话框的应用程序:ButtonTest。2.利
2、用对话框资源编辑器,按图12.1建立程序界面。在控件工具条上依次将静态组框控件、单选按钮控件、复选按钮控件、编辑框控件拖入对话框界面上合适的位置,原界面上默认按钮IDCANCEL标题改为“取消”,利用Properties属性对话框将IDOK按钮的标题改为“获取结果”,ID号改为IDC_BUTTONSHOW,设置如图12.1所示控件的属性如表12-1。表12-1ButtonTest控件属性控件ID标题属性静态组框默认年龄默认静态组框默认运动默认静态组框默认食品默认单选按钮IDC_RADIO140默认复选按钮IDC_CHECK1跑步Group, 其它默认复选按钮IDC_CHECK2体操 默认复选按
3、钮IDC_CHECK3游泳默认复选按钮IDC_CHECK4滑冰默认复选按钮IDC_CHECK5牛奶Group, 其它默认复选按钮IDC_CHECK6鸡蛋默认复选按钮IDC_CHECK7面包 默认复选按钮IDC_CHECK8水果 默认复选按钮IDC_CHECK9饮料默认编辑框IDC_EDITSHOW默认按钮IDC_BUTTONSHOW获取结果默认3按组合键Ctrl+W打开ClassWizard类向导对话框,为控件添加成员变量,如图12.2所示。添加控件变量如表12-2所示。图12.2 ClassWizard类向导对话框表12-2 控件及其关联变量控件ID号变量类型变量名取值范围IDC_CHECK
4、1BOOLm_A1IDC_CHECK2BOOLm_A2IDC_CHECK3BOOLm_A3IDC_CHECK4BOOLm_A4IDC_CHECK5BOOLm_B1IDC_CHECK6BOOLm_B2IDC_CHECK7BOOLm_B3IDC_CHECK8BOOLm_B4IDC_CHECK9BOOLm_B5IDC_EDITSHOWCStringm_result4双击对话框模板界面上每一个复选按钮,或按组合键Ctrl+W,打开类向导页面添加每个复选按钮的消息响应函数:如图12.3所示。图12.3 ClassWizard类向导对话框5添加的消息响应函数代码如下:void CButtonTestDlg
5、:OnCheck1() if(m_A1) m_A1=false; else m_A1=true;void CButtonTestDlg:OnCheck2() if(m_A2) m_A2=false; else m_A2=true;void CButtonTestDlg:OnCheck3() if(m_A3) m_A3=false; else m_A3=true;void CButtonTestDlg:OnCheck4() if(m_A4) m_A4=false; else m_A4=true;void CButtonTestDlg:OnCheck5() if(m_B1) m_B1=false;
6、 else m_B1=true;void CButtonTestDlg:OnCheck6() if(m_B2) m_B2=false; else m_B2=true;void CButtonTestDlg:OnCheck7() if(m_B3) m_B3=false; else m_B3=true;void CButtonTestDlg:OnCheck8() if(m_B4) m_B4=false; else m_B4=true;void CButtonTestDlg:OnCheck9() if(m_B5) m_B5=false; else m_B5=true;说明:复选按键的相关变量如m_A
7、取逻辑值true或false代表选中与否的标志。6将项目工作区窗口切换到ClassView页面,双击CButtonTestDlg类下的OnInitDialog()函数,添加代码如下:BOOL CButtonTestDlg:OnInitDialog() CheckRadioButton(IDC_RADIO1,IDC_RADIO4,IDC_RADIO1); /设置第1个为选中 return TRUE; / return TRUE unless you set the focus to a control7进入ClassWizard页面,在Class Name 列表框中选择CButtonTestDl
8、g,在Object IDs列表中选择IDC_BUTTONSHOW,在Messages列表中选择BN_CLICKED单击消息。添加【获取结果】的消息响应函数,添加代码如下:void CButtonTestDlg:OnButtonshow() CString strCtrl; m_result=你的年龄:; UINT nID=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO4); GetDlgItemText(nID,strCtrl); m_result+=strCtrl+, 爱好的运动; if (m_A1) m_result+= 跑步; if (m_A2) m
9、_result+= 体操; if (m_A3) m_result+= 游泳; if (m_A4) m_result+= 滑冰; m_result+=, 爱好的食品; if (m_B1) m_result+= 牛奶; if (m_B2) m_result+= 鸡蛋; if (m_B3) m_result+= 面包; if (m_B4) m_result+= 水果; if (m_B5) m_result+= 饮料; UpdateData(FALSE);8程序运行结果如图12.1所示。写出实验总结及实验报告。实验2 编辑框和旋转按钮控件实验内容创建一个基于对话框的应用程序CountTest,如图12
10、.4所示,页面上编辑框用于输入学生的姓名和三门课的成绩,当用户点击【计算平均分】按钮,平均分会显示在相应的编辑框中;点击【计算总分】按钮,总分也显示在相应编辑框中。 图12.4程序运行结果实验步骤1启动Visual C+6.0,利用应用程序向导建立一个基于对话框的应用程序CountTest。2打开对话框编辑器,添加编辑框和按钮控件,设计如图12.4所示的界面,调整控件的布局。各控件属性的设置如表12-3所示。3设置显示总分和平均分的编辑框的属性如图12.5所示。设置编辑框的属性为only-Read,确保在此编辑中只能获取程序内部计算出来的值,而无法被外界更改。图12.5 编辑框的属性表12-3
11、Count Test控件属性控件ID标题静态文本默认姓名:静态文本默认VC程序设计静态文本默认英语静态文本默认XML静态文本默认平均分:静态文本默认总分:编辑框IDC_NAME编辑框IDC_SCORE1编辑框IDC_SCORE2编辑框IDC_SCORE3编辑框IDC_AVERAGE编辑框IDC_SUM旋转按钮IDC_SPIN1旋转按钮IDC_SPIN2旋转按钮IDC_SPIN3按钮IDC_BUTTONAVE按钮IDC_BUTTONSUM4设置旋转按钮属性Auto buddy、Right如图12.6所示。图12.6 旋转按钮属性5按组合键Ctrl+W,打开ClassWizard类向导对话框,选中
12、Member Variables页面,依次为编辑框关联变量,如图12.7所示。添加后的成员变量见表12-4所示。图12.7 ClassWizard类向导对话框表12-4控件及其关联变量控件ID类型变量名取值范围IDC_SCORE1floatm_s10.0100.0IDC_SCORE2floatm_s20.0100.0IDC_SCORE3floatm_s30.0100.0IDC_AVERAGEfloatm_aveIDC_SUMfloatm_sumIDC_SPIN1CSpinButtonCtrlm_spin1IDC_SPIN2CSpinButtonCtrlm_spin1IDC_SPIN3CSpin
13、ButtonCtrlm_spin16.将项目工作区窗口切换到ClassView页面,双击CCountTestDlg类下的OnInitDialog()函数,添加代码如下:BOOL CCountTestDlg:OnInitDialog() m_spin1.SetRange(0,100); /设置旋转按钮范围 m_spin2.SetRange(0,100); m_spin3.SetRange(0,100); return TRUE; / return TRUE unless you set the focus to a control7.按组合键Ctrl+W,打开类向导对话框,在Message Ma
14、ps页面中分别为IDC_SPIN1、IDC_SPIN2、IDC_SPIN3添加UDN_DELTAPOS消息映射函数,并分别添加如下代码:void CCountTestDlg:OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR; UpdateData(); m_s1+=(float)pNMUpDown-iDelta*0.5f; UpdateData(FALSE); *pResult = 0;void CCountTestDlg:OnDeltaposSpin2(NMHD
15、R* pNMHDR, LRESULT* pResult) NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR; UpdateData(); m_s2+=(float)pNMUpDown-iDelta*0.5f; UpdateData(FALSE); *pResult = 0;void CCountTestDlg:OnDeltaposSpin3(NMHDR* pNMHDR, LRESULT* pResult) NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR; UpdateData(); m_s3+=(float)pNMUpDow
16、n-iDelta*0.5f; UpdateData(FALSE); *pResult = 0;8.为程序添加消息响应函数按组合键Ctrl+W,打开类向导对话框,在Message Maps页面中为两个按钮IDC_BUTTONAVE和IDC_BUTTONSUM添加单击BN_CLICKED的消息响应函数,如图12.8所示。图12.8 消息响应函数对话框9添加函数代码在类向导页面中点击【EditCode】按钮,进入源程序页面,在光标所停的地方添加代码如下:void CCountTestDlg:OnButtonave() UpdateData( ); m_ave = (m_s1+ m_s2 +m_s3)
17、 / 3; / 计算平均分 UpdateData(FALSE); void CCountTestDlg:OnButtonsum() UpdateData( ); m_sum = m_s1 +m_s2 + m_s3; / 计算总分 UpdateData(FALSE); (10)编译运行程序,即可得到结果。写出实验总结及实验报告。实验3编辑框和按钮控件实验内容利用MFC创建一个基于对话框的应用程序ComputerTest,程序运行结果如图12.9所示的计算器,计算器界面上各个按钮代表不同的计算数字和运算符,编辑框用来显示计算结果。图12.9 程序运行结果实验步骤1启动Visual C+6.0,利用
18、MFC向导创建一个基于对话框的应用程序ComputerTest。2将对话框模板上默认的两个按钮删除,利用控件工具栏增加如图12.9所示的各个按钮控件和编辑框控件。设置控件属性表12-5所示。3打开ClassWizard类向导页面,选择Member Variables标签页面,为编辑框控件IDC_EDIT1分别添加字符串类型CString和编辑框类型CEdit的变量:m_result和m_edit,如图12.10所示。添加的成员变量如表12-6。表12-5 ComputerTest控件属性控件ID标题 属性编辑框IDC_EDIT1 Centered按钮IDC_BUTTON11 默认按钮IDC_B
19、UTTON22 默认按钮IDC_BUTTON33 默认按钮IDC_BUTTON44 默认按钮IDC_BUTTON55 默认按钮IDC_BUTTON66 默认按钮IDC_BUTTON77 默认按钮IDC_BUTTON99 默认按钮IDC_BUTTON00 默认按钮IDC_CECE 默认按钮IDC_RESULT= 默认按钮IDC_ADD+ 默认按钮IDC_DIFFERENCE- 默认按钮IDC_MULTIPLE 默认按钮IDC_DEVIDE 默认表12-6 控件及其关联变量控件ID号变量类型变量名取值范围IDC_EDIT1CStringm_resultIDC_EDIT1CEditm_edit图12
20、.10 ClassWizard类向导对话框 4双击数字1按钮控件,或打开类向导中Message Maps页面,添加该数字按钮IDC_BUTTON1的单击BN_CLICKED消息函数,并添加如下代码:void CComputerTestDlg:OnButton1() char last10; m_edit.GetWindowText(last,10); / 获取编辑框中已输入的文本 char s2=1; m_result=strcat(last,s); / 将先后输入的文本拼接成一个字符串 UpdateData(FALSE);用同样的方法为其他九个数字按钮添加单击的消息,并添加相应的代码,只需将
21、每个消息函数体中char s =“1”;设置为相应的数字“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“0”即可。5按组合键Ctrl+W,打开类向导对话框,在Message Maps页面中为【CE】复位归零按钮添加单击BN_CLICKED的消息响应函数,并添加如下代码:void CComputerTestDlg:OnCe() m_edit.SetSel(0,-1) ; / 将编辑框中内容全部选中 m_edit.ReplaceSel( ); / 将选中的内容替换为空 6将项目工作区窗口切换到ClassView页面,选中 CComputerTestDlg类单击鼠标右键选择Add
22、Member Variable,为对话框类添加Public型成员变量如下:double data1, data2, result; /用来代表运算数和结果int flag; / 代表运算类型图12.11 ClassWizard类向导对话框7按组合键Ctrl+W,打开类向导对话框,在Message Maps页面中分别为加、减、乘、除运算符按钮添加单击BN_CLICKED的消息响应函数如图12.11所示,并添加如下代码: “+”运算符:void CComputerTestDlg:OnAdd() char last 10; m_edit.GetWindowText (last, 10); / 获取编
23、辑框中输入的内容 data1=atof ( (LPCTSTR) last ); / 将编辑框中的字符串内容转化为数值型内容 m_result= ; / 将编辑框清空,以便于输入显示另一个计算数 UpdateData (FALSE); flag=1; / 标志值置1代表加运算 “”运算符:void CComputerTestDlg:OnDifference() char last 10; m_edit.GetWindowText (last, 10); / 获取编辑框中输入的内容 data1=atof ( (LPCTSTR) last ); / 将编辑框中的字符串内容转化为数值型内容 m_res
24、ult= ; / 将编辑框清空,以便于输入显示一个计算数 UpdateData (FALSE); flag=2; / 标志值置2代表减运算 “”运算符:void CComputerTestDlg:OnMultiple() char last 10; m_edit.GetWindowText (last, 10); / 获取编辑框中输入的内容 data1 = atof ( (LPCTSTR) last ); / 将编辑框中的字符串内容转化为数值型内容 m_result= ; / 将编辑框清空,以便于输入显示一个计算数 UpdateData (FALSE); flag = 3; / 标志值置3代表
25、乘运算 “”运算符:void CComputerTestDlg:OnDevide() char last10; m_edit.GetWindowText (last, 10); / 获取编辑框中输入的内容 data1=atof ( (LPCTSTR) last ); / 将编辑框中的字符串内容转化为数值型内容 m_result = ; / 将编辑框清空,以便于输入显示一个计算数 UpdateData (FALSE); flag=4; / 标志值置4代表除运算 8. 按组合键Ctrl+W,打开类向导对话框,在Message Maps页面中为“=”按钮添加单击BN_CLICKED的消息响应函数,并
26、添加如下代码:void CComputerTestDlg:OnResult() char s20; UpdateData(); data2=atof( (LPCTSTR)m_result); if (flag=1) result=data1+data2; / 执行加运算 if (flag=2) result=data1-data2; / 执行减运算 if (flag=3) result=data1*data2; / 执行乘运算 if (flag=4) result=data1/data2; / 执行除运算 _gcvt(result,10,s); / 将计算结果result转换为字符串类型 m_result=(LPCTSTR)s; /将字符串S中内容转化为编辑框变量所对应CString类型 UpdateData(FALSE);9编译运行程序,结果如图12.9所示,按算术运算规则可得出相应的结果。写出实验总结及实验报告。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1