1、基于VC的MFC计算器案例步骤及源代码基于VC的MFC计算器案例详细步骤有图有代码,图中右边的各个函数也都能实现:清除,加,减,乘,除,倒数,e的x次方,以e为底x的对数,10的x次方,以10为底x的对数,余弦,反余弦,双曲余弦值,正弦,反正弦,双曲正弦值,正切,反正切,双曲正切值,x的y次方,2的x次方,n(n为整数)的阶乘。如图:步骤:1.创建一个基于对话框的应用程序(这一步应该都会吧!),命名为dckCalculator;2.打开资源视图-点击“dckCalculator”左边的“+”-点击“dckCalculator.rc”左边的“+”-点击“Dialog”左边的“+”-双击“IDD_
2、DCKCALCULATOR_DIALOG”-去除“确定”“取消”“TODO:在此放置对话框控件。”几个组件(全选。然后右击选择“删除”即可):3.按照我们想要的效果给对话框添加组件-编辑各个组件的显示名字-改变其属性4.将编辑框的属性中的AlignText设置为right,如图:5.设置相关属性(每次改变ID都要保存一下):控件Caption(名称)ID控件captionID按钮0IDC_BUTTON0按钮expIDC_EXP按钮1IDC_BUTTON1按钮10xIDC_10X按钮2IDC_BUTTON2按钮cosIDC_COS按钮3IDC_BUTTON3按钮sinIDC_SIN按钮4IDC_
3、BUTTON4按钮lnIDC_LN按钮5IDC_BUTTON5按钮logIDC_LOG按钮6IDC_BUTTON6按钮arccosIDC_ARCCOS按钮7IDC_BUTTON7按钮arcsinIDC_ARCSIN按钮8IDC_BUTTON8按钮tanIDC_TAN按钮9IDC_BUTTON9按钮arctanIDC_ARCTAN按钮+/-IDC_BUTTON_SIGN按钮coshIDC_COSH按钮.IDC_BUTTON_POINT按钮sinhIDC_SINH按钮+IDC_BUTTON_ADD按钮tanhIDC_TANH按钮-IDC_BUTTON_MINUS按钮XyIDC_XDEY按钮*IDC
4、_BUTTON_MUTIPLY按钮2xIDC_2DEX按钮/IDC_BUTTON_DIV按钮N!IDC_NJIECHENG按钮CIDC_BUTTON_CLEAR单选弧度IDC_HUDU按钮sqrtIDC_BUTTON_SQRT单选角度IDC_JIAODU按钮1/xIDC_BUTTON_RECI编辑框编辑框IDC_DISPLAY(只读)按钮=IDC_BUTTON_EQUAL6.将编辑框中属性的“readonly”设置为ture!7.在类视图中给CdckCalculatorDlg类添加成员变量:intm_duType;初始值为0,用来作为判定弧度还是角度的变准;doublem_first;/存储一
5、次运算的第一个操作数及一次运算的结果doublem_second;/存储一次运算的第二个操作数CStringm_operator;/存储运算符doublem_coff;/存储小数点的系数权值8.给编辑框添加关联变量:(右击编辑框-添加变量)CStringm_display;/编辑框IDC_DISPLAY的关联变量,显示计算结果(注意最右边选择“value”)9.双击“弧度”给其添加事件响应(等价于右击然后添加事件处理器);同理双击“角度”添加代码:/弧度处理函数voidCdckCalculatorDlg:OnBnClickedHudu()m_duType=0;/系统默认m_duType为,这里
6、为刚好可以为计算器默认为弧度计算/角度处理函数voidCdckCalculatorDlg:OnBnClickedJiaodu()m_duType=1;/当选择角度处理函数的时候,m_duType为;这哥主要是作为以后函数算法的判断标准10.在对话框类的构造函数中,初始化成员变量:/CdckCalculatorDlg对话框的构造函数CdckCalculatorDlg:CdckCalculatorDlg(CWnd*pParent/*=NULL*/):CDialog(CdckCalculatorDlg:IDD,pParent),m_duType(0),m_first(0.0),m_second(0.
7、0),m_operator(_T(+),m_coff(0),m_display(_T(0.0)11.类视图里手动为对话框添加2个函数:voidUpdateDisplay(doubledck)用于编辑框显示数据VoidCalculate(void)用于计算结果代码如下(由于在代码中要用到fabs,要在CdckCalculatorDlg.cpp里添加一个库:#includemath.h):/在编辑框中显示数据voidCdckCalculatorDlg:UpdateDisplay(doubledck)m_display.Format(_T(%f),dck);inti=m_display.GetLen
8、gth();while(m_display.GetAt(i-1)=0)/格式化输出,将输出结果后的零截去m_display.Delete(i-1,1);i-;UpdateData(false);/更新编辑框变量m_display/计算结果voidCdckCalculatorDlg:Calculate(void)/将前一次数据与当前数据进行运算,作为下次的第一操作数,并在编辑框显示。switch(m_operator.GetAt(0)case+:m_first+=m_second;break;case-:m_first-=m_second;break;case*:m_first*=m_secon
9、d;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;m_operator=_T(+);UpdateDisplay(m_first);/更新编辑框显示内容12.如上添加函数voidonButtonN(intn);以便数字按钮调用响应/用于数字按钮调用voidCdckCalculatorDlg:onButtonN(intn)if(m_coff=1.0)m_second=m_second*10+
10、n;/作为整数输入数字时elsem_second=m_second+n*m_coff;/作为小数输入数字m_coff*=0.1;UpdateDisplay(m_second);/更新编辑框的数字显示13.双击各个数字按钮,添加响应,调用函数:如:voidCdckCalculatorDlg:OnBnClickedButton0()onButtonN(0);voidCdckCalculatorDlg:OnBnClickedButton1()onButtonN(1);14.为各个运算符号添加事件处理器:/+/-voidCdckCalculatorDlg:OnBnClickedButtonSign()
11、m_second=-m_second;UpdateDisplay(m_second);/.voidCdckCalculatorDlg:OnBnClickedButtonPoint()m_coff=0.1;/+voidCdckCalculatorDlg:OnBnClickedButtonAdd()Calculate();m_operator=+;/-*方法类似/voidCdckCalculatorDlg:OnBnClickedButtonDiv()Calculate();m_operator.Format(_T(%s),/);/CvoidCdckCalculatorDlg:OnBnClicked
12、ButtonClear()m_first=0.0;m_second=0.0;m_operator=+;m_coff=1.0;UpdateDisplay(0.0);/sqrtvoidCdckCalculatorDlg:OnBnClickedButtonSqrt()if(m_second=0)m_first=sqrt(m_first);UpdateDisplay(m_first);elsem_second=sqrt(m_second);UpdateDisplay(m_second);/1/xvoidCdckCalculatorDlg:OnBnClickedButtonReci()if(fabs(m
13、_second)0.000001&fabs(m_first)0.000001)m_display=除数不能为零;UpdateData(false);return;if(fabs(m_second)1)returnn*fun(n-1);在n!的按钮消息处理里,如果输入的不是整数则不能进行阶乘运算:/n!voidCdckCalculatorDlg:OnBnClickedNjiecheng()if(m_second-(int)m_second)0)m_display=_T(你输入的不是整数,请输入整数!);UpdateData(false);/如果是非整数,则结束运算,重新开始return;elsem_second=(double)jiecheng(m_second);UpdateDisplay(m_second);19.所有按钮事件处理已经完成,编译运行: