您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > VC++对话框与常用控件-计算器
对话框与常用控件掌握Button、EditBox和StaticText控件的创建和使用方法掌握基于对话框的应用程序的编程技术教学目标《VisualC++程序设计》电子教案----王明福编教学内容MyCalculator程序演示开发MyCalculator程序§4.1MyCalculator程序返回目录程序运行结果程序运行演示§4.2开发MyCalculator程序4.2.1创建工程4.2.2可视化设计4.2.3为编辑框IDC_DISPLAY引入变量4.2.4为CMyCalculatorDlg类添加数据成员4.2.5为BUTTON按钮的BN_CLICKED事件添加响应函数4.2.6编写程序代码4.2.7技术要点4.2.8程序优化返回目录4.2.1创建工程返回创建MyCalculator工程的步骤:(1)启动VisualC++6.0。从“File”菜单中选择“New”;(2)在New对话框中选择“Project”标签,然后指定工程类型MFCAppWizard[exe]、工程名MyCalculator和工程位置D:\MyVC;(3)点击“OK”按钮,弹出MFCAppWizard-Step1对话框。选择“Dialogbased”单选按钮,创建一个基于对话框的应用程序;(4)单击“Finish”按钮。此时Visualc++6.0将显示NewProjectInformation窗口;(5)单击“OK”按钮。于是,VisualC++6.0就会创建MyCalculator工程以及相关的所有文件。4.2.2可视化设计可视化设计,就用VC++自带的工具软件Winzards,制作计算器程序界面。即添加计算器中的数字、运算符等按钮和数字显示编辑框。控件的两个要素:ID标识符和Caption文本返回4.2.3为编辑框IDC_DISPLAY引入变量为了能够在程序运行过程中,将输入的数据和计算的结果在编辑框上显示,必须为它引入一个变量,从而能够使编辑框以变量的形式出现在程序中。利用函数UpdateData(true)或UpdateData(false)就可达到目的。在MFCClassWizard对话框中,选择“MemberVariable”标签为IDC_DISPLAY编辑框引入变量:CStringm_display;返回4.2.4为CMyCalculatorDlg类添加数据成员为了实现计算器功能,我们需要向CMyCalculatorDlg类(即MyCalculatorDlg.h文件中)添加变量。变量属性和用途如下表。数据类型数据变量名称数据的作用doublem_first存储一次运算的第一个数以及一次运算的结果doublem_second存储一次运算的第二个数doublem_coff存储小数点的系数权值CStringm_operator存储运算操作符返回4.2.5为Button按钮的BN_CLICKED事件添加响应函数用MFCClassWizard为对话框IDD_MYCALCULATOR_DIALOG中的所有Button按钮的BN_CLICKED事件添加处理函数,如表4-3所示。ObjectIDsMessagesMemberFunctionsIDC_BUTTON1BN_CLICKEDOnOnButton1()………………IDC_BUTTON9BN_CLICKEDOnOnButton9()IDC_BUTTON_POINTBN_CLICKEDOnButtonPoint()IDC_BUTTON_SIGNBN_CLICKEDOnButtonSign()IDC_BUTTON_ADDBN_CLICKEDOnButtonAdd()IDC_BUTTON_MINUSBN_CLICKEDOnButtonMinus()IDC_BUTTON_MUTIPLYBN_CLICKEDOnButtonMutiply()………………返回4.2.6编写程序代码1.为数字“N”按钮的消息响应函数添加代码。算法设计如下:(1)作为整数输入数字N时(N=0,—9):m_second=m_second*10+N;(2)作为小数输入数字N时(N=0,—9):m_second=m_second+N*m_coff;m_coff*=0.1;voidCMyCalculatorDlg::OnButton8(){if(m_coff==1.0)//作为整数输入m_second=m_second*10+8;else//作为小数输入{m_second=m_second+8*m_coff;m_coff*=0.1;}UpdateDisplay(m_second);//更新编辑框的数据显示}完全类似,请读者为其它数字按钮的消息响应函数添加代码。返回2.为运算符(+、-、*、/)按钮的消息响应函数添加代码算法描述:(1)m_first与m_second作m_operator运算后m_first;(2)0m_second;(3)m_firstm_display(显示)(4)用当前点击的运算符m_operator;(5)将小数的权值变量m_coff置1.0复位。以点击“+”运算符为例,在消息响应函数中编写如下代码。voidCMyCalculatorDlg::OnButtonAdd(){Calculate();m_operator=+;}voidCMyCalculatorDlg::Calculate(void){switch(m_operator.GetAt(0)){case'+':m_first+=m_second;break;case'-':m_first-=m_second;break;case'*':m_first*=m_second;break;case'/':if(fabs(m_second)=0.000001){m_display=除数不能为零;UpdateData(false);return;}m_first/=m_second;break;}m_second=0.0;m_coff=1.0;UpdateDisplay(m_first);//更新编辑框的显示内容}voidCMyCalculatorDlg::UpdateDisplay(doublelVal){m_display.Format(_T(%f),lVal);inti=m_display.GetLength();//格式化输出,将输出结果后的零全部截去while(m_display.GetAt(i-1)=='0'){m_display.Delete(i-1,1);i--;}UpdateData(false);//更新显示编辑框变量m_display}其它运算类似,留给读者自已完成。3.为等号“=”按钮消息响应函数添加代码算法设计:(1)m_first与m_second作m_operator运算后m_first;(2)m_firstm_display(显示)(3)0m_second;(4)0=m_first(5)将小数的权值变量m_coff置1.0。(6)输入的运算符m_operator;voidCMyCalculatorDlg::OnButtonEqual(){Calculate();m_first=0.0;m_operator=+;}4.在OnButtonSqrt()函数中,编写代码voidCMyCalculatorDlg::OnButtonSqrt(){m_second=sqrt(m_second);UpdateDisplay(m_second);}5.为“C”和“1/X”按钮的消息响应函数编写代码voidCMyCalculatorDlg::OnButtonClear(){m_first=0.0;m_second=0.0;m_operator=+;m_coff=1.0;UpdateDisplay(0.0);}voidCMyCalculatorDlg::OnButtonReciprocal(){if(fabs(m_second)0.000001){m_display=除数不能为零;UpdateData(false);return;}m_second=1.0/m_second;UpdateDisplay(m_second);}6.为“+/-”“.”按钮的消息响应函数编写代码//“.”按钮的消息响应函数voidCMyCalculatorDlg::OnButtonPoint(){m_coff=0.1;}//“+/-”按钮的消息响应函数voidCMyCalculatorDlg::OnButtonSign(){m_second=-m_second;UpdateDisplay(m_second);}返回4.2.7技术要点——UpdateData函数①UpdateData函数是CDialog的基类CWnd的成员函数;②函数原型如下:BOOLUpdateData(BOOLbSaveAndValidate=TRUE);③一般在对话框的派生类中,利用UpdateData函数进行控件和相应变量之间的数据传递,形式如下:UpdateData(TRUE);//将控件中的数据传递给相应的变量UpdateData(FALSE)//将变量中的数据传递给相应的控件,即显示返回4.2.7技术要点——关于消息响应函数用MFCClassWizard为对话框中某按钮的BN_CLICKED事件添加消息处理函数时,MFCClassWizard为我们做了三件事:(1)在类的定义MyCalculatorDlg.h文件中,添加了消息响应函数的函数原型;(2)在类的实现文件MyCalculatorDlg.cpp中,添加了函数体;(3)在类的实现文件MyCalculatorDlg.cpp中,添加了消息映射。所以,如果想删除通过ClassWizard创建的消息响应函数,在MFCClassWizard对话框中,选中要删除的函数,单击“Deletefunction”按钮将函数删除。但是源文件中相应的函数体并没有删除,需要手工方法将函数体删除。4.2.7技术要点——字符串CString类CString类的对象由一个长度可变的字符序列组成,包含很多成员函数用来操作字符串,可以很方便地实现对字符串的各种操作。CString类中的字符是TCHAR类型的。(1)构造函数CString();//产生一个空的CString对象CString(constCString&stringSrc);//用另一个CString对象的值初始化对象CString(TCHARch,intnRepeat=1);//用一个字符重复若干次初始化对象CString(LPCTSTRlpch,intnLength);//用一个字符数组的指定长度初始化对象CString(constunsignedchar*psz);//从一个无符号字符指针初始化对象CString(LPCWSTRlpsz);//从一个Unicode字符串初始化对象CString(LPCSTRlpsz);//从一个ANSI字符串初始化对象返回4.2.8优化MyCalculator程序ON_COMMAND_RANGE使用一个消息处理函数来处理对某个ID范围内所有控件的命令响应,该宏的原型为:ON_COMMAND_RANGE(ID1,ID2,memberFxn);其中ID1是控件ID的起始值;ID2是控件ID的结束值;memberFxn为消息响应函数。用OnOperandInput处理数字按钮“0”〜“9”的消息响应函数的方法是:(1)手工添加函数声明,也就是在MyCalculatorDlg.h中“{{AFX_MSG(CMyCalculatorDlg)”与“}}AFX_MSG”之间,添加下面的语句:afx_msgvoidOnOperandInput(UINTnID);(2)在MyCalculatorDlg.cpp文件中“{{AFX_MSG_MAP(CMyCalculatorDlg)”与“}}AFX_MSG_MAP”之间,加入下面语句:ON_COMMAND_
本文标题:VC++对话框与常用控件-计算器
链接地址:https://www.777doc.com/doc-3382989 .html