可视化编程MFC计算器

合集下载

简单MFC程序设计(编写一个小型计算器)

简单MFC程序设计(编写一个小型计算器)
} void CTestDlg::OnButtonNum0() {
if(dotflag==1) {
quan= quan*10; m_Num += 0 / (double)quan; } else { if(numflag==1) {
m_Num = m_Num * 10 + 0; } else m_Num = 0; } numflag = 1; mark=1; UpdateData(FALSE); } void CTestDlg::OnButtonZhengfu() { UpdateData(); m_Num = 0-m_Num; UpdateData(FALSE); } void CTestDlg::OnButtonDengyu()
m_Num = m_Num * 10 + 8; } else m_Num = 8; } numflag = 1; mark=1; UpdateData(FALSE); } void CTestDlg::OnButtonNum9()
5
{ if(dotflag==1) { quan= quan*10; m_Num += 9 / (double)quan; } else { if(numflag==1) { m_Num = m_Num * 10 + 9; } else m_Num = 9; } numflag = 1; mark=1; UpdateData(FALSE);
是否为数字的 int 型标志 mark。
c) 然后考虑到在计算过程中 num1 和 num2 的储存状态有三种,num1==0 和
num2==0,也就是程序开始运行还没有开始录入数字的状态;num1!=0 和
num2==0,也就是第一个数字已经录入,第二个数字还没有录入的状态这时

基于MFC简易计算器

基于MFC简易计算器

上机指导书一、对话框编程1、建立一个基于对话框的应用程序Calculator;2、为CCalculatorDlg建立对话框资源,如下图所示3、为CCalculatorDlg添加成员变量:char m_buffer[100];//用来存贮需要显示的数字CString m_StrBegin;//记录初始操作数的字符串double m_end;//记录结果操作数double m_begin;//记录初始操作数int m_bit;//记录运算符int m_IsCheckPoint;//判断是否按下了小数点符号,当其为0时,表示没有按下4、为应用程序添加CEdit类的派生类CAdvEdit,并为该类添加三个成员函数:其中OnPaint()为虚函数。

这三个函数的函数体如下:void CAdvEdit::OnDisplay(LPCTSTR lpszStr){m_Caption=lpszStr; OnDraw();}void CAdvEdit::OnDraw(){CRect rect; GetClientRect(&rect);CDC *pDC=GetDC(); pDC-> SetBkMode(TRANSPARENT);CBrush *pBrush=new CBrush(RGB(255,255,255));pDC-> FillRect(&rect,pBrush); pDC-> SetTextColor(RGB(92,92,92));pDC-> DrawText(m_Caption,rect,DT_SINGLELINE|DT_VCENTER|DT_RIGHT);}void CAdvEdit::OnPaint(){CPaintDC dc(this); // device context for paintingOnDraw();}5、对话框资源中的编辑框添加控件类型的成员变量:CAdvEdit m_DspEdit;6、为应用程序CCalculatorDlg类添加成员函数Result()/,来处理运算符操作:void CCalculatorDlg::Result()//用来处理按下符号键时的函数,是计算的核心函数{m_IsCheckPoint = false;m_begin = atof(m_StrBegin);switch(m_bit){ case 1: m_end += m_begin; break; //处理+号case 2: m_end -= m_begin; break; //处理-号case 3: m_end *= m_begin; break; //处理*号,即乘法case 4: //处理/号,即除法if (m_begin==0) { m_DspEdit.OnDisplay("除数不能为零!"); return; }m_end /= m_begin; break;case 5: //处理sqrt号,即开方if (m_end<0) { m_DspEdit.OnDisplay("函数输入无效!"); return; }m_end = sqrt(m_end); break;case 6: //处理1/x号,即求倒数m_end = 1/m_end; break;default: m_end = m_begin; break;}m_begin = 0.0; m_bit = 0; m_StrBegin = "";int i = sprintf(m_buffer,"%10.12f",m_end);//将结果转换为字符串TrimZero(m_buffer,i); //去掉字符串尾部多余的零m_DspEdit.OnDisplay(m_buffer);}7、为对话框的运算符按钮添加消息处理函数:void CCalculatorDlg::AdvButtonPoint() //按下.键时的处理函数{ if (!m_IsCheckPoint && m_StrBegin != ""){ m_StrBegin = m_StrBegin+"."; m_DspEdit.OnDisplay(m_StrBegin);m_IsCheckPoint = true; } }void CCalculatorDlg::AdvButtonAdd(){ Result(); m_bit = 1; }void CCalculatorDlg::AdvButtonSub(){ Result(); m_bit = 2; }void CCalculatorDlg::AdvButtonMul(){ Result(); m_bit = 3; }void CCalculatorDlg::AdvButtonDiv(){ Result(); m_bit = 4; }void CCalculatorDlg::AdvButtonClear(){ m_IsCheckPoint = false; m_StrBegin = "";m_begin = 0.0; m_end = 0.0; m_bit = 0; m_DspEdit.OnDisplay("0."); }void CCalculatorDlg::AdvButtonSqrt(){ Result(); m_bit = 5; }void CCalculatorDlg::AdvButtonReverse(){ Result(); m_bit = 6; }void CCalculatorDlg::AdvButtonEqu() //按下=键时的处理函数{ Result(); m_bit = 7; }8、为对话框的数字按钮添加消息处理函数:void CCalculatorDlg::Button0()//按下0键时的处理函数{ m_StrBegin = m_StrBegin+"0";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::Button1(){ m_StrBegin = m_StrBegin+"1";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::Button2(){ m_StrBegin = m_StrBegin+"2";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::Button3(){ m_StrBegin = m_StrBegin+"3";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::Button4(){ m_StrBegin = m_StrBegin+"4";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::Button5(){ m_StrBegin = m_StrBegin+"5";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::Button6(){ m_StrBegin = m_StrBegin+"6";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::Button7(){ m_StrBegin = m_StrBegin+"7";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::vButton8(){ m_StrBegin = m_StrBegin+"8";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }void CCalculatorDlg::vButton9(){ m_StrBegin = m_StrBegin+"9";if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+"."); else m_DspEdit.OnDisplay(m_StrBegin); }9、为应用程序CCalculatorDlg类添加成员函数TrimZerot()/,来去掉字符串尾部多余的零:void CCalculatorDlg::TrimZero(char *pStr,int iLen)//用于去掉字符串尾部多余的零。

用MFC制作简易计算器

用MFC制作简易计算器

面向对象编程技术课程设计课题名称:用VC++制作简单计算器用VC++制作简单计算器简述:该课程设计将实现一个简单计算器。

其类似于Windows附件中自带的计算器。

这个计算器可以实现简单的四则运算功能,而且具有简洁大方的图文外观。

系统具有良好的界面和必要的交互信息。

即时准确地获得需要的计算的结果,充分降低了数字计算的难度,从而节约了时间,对人们的生活有一定的帮助。

在课程设计中,程序设计设计语言采用Visual C++,在程序设计中,采用了面向对象解决问题的方法。

课题背景计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除简单运算的工具。

要实现计算功能,可以用VC++的知识编写程序来解决此问题。

该计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度。

该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。

功能说明系统具有良好的界面;必要的交互信息;简约美观的效果。

使用人员能快捷简单地进行操作。

可单机按钮进行操作即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

(1)包含的功能有:加、减、乘、除;(2)计算器上数字分为显示区,可以显示用户所点击的按键,最后显示结果;按键区,可以让用户选择所需的数字以及小数点;功能区,该区域提供用户所需的运算按钮;(3)计算功能基本上是用系统内部函数;(4)“AC”按钮可以清除所有已输入的数据从头计算;(5)“DEL”按钮可以删除所输入的最后以为数字;编辑资源创建步骤新建一个MFC基于对话框的工程VC++对话框界面右击按钮,修改按钮的属性建立类向导最后点击Edit Code就可以添加代码对其它按钮的操作与之类似,对编辑框的“建立类向导”有点区别,这里不附详细步骤代码展示“1”按钮对应的代码void CMyDlg::OnButton1(){UpdateData(1);if(pass1==1 )m_str="1";else m_str+="1";pass1=0;UpdateData(0);}“2”按钮对应的代码void CMyDlg::OnButton2(){UpdateData(1);if(pass1==1 )m_str="2";else m_str+="2";pass1=0;UpdateData(0);}“3”按钮对应的代码void CMyDlg::OnButton3(){UpdateData(1);if(pass1==1 )m_str="3";else m_str+="3";pass1=0;UpdateData(0);}“4”按钮对应的代码void CMyDlg::OnButton3(){UpdateData(1);if(pass1==1 )m_str="4";else m_str+="4";pass1=0;UpdateData(0);}“5、6、7、8、9、0”按钮对应的代码与“1、2、3、4”按钮对应的代码相近“=”按钮对应的代码void CMyDlg::Onresult(){UpdateData(1);int i,z,s,j,x=0,y=1,t,m=1;char b[10];double rate=10.0,itemp=0.0,a[20];for(i=0;i<20;i++)a[i]=1000000.0;for(i=0;i<10;i++)b[i]=' ';z=0;for(i=0;i<m_str.GetLength();i++) {if(isdigit(m_str.GetAt(i))){if(rate==10.0){ itemp=itemp*rate+(m_str.GetAt(i)-'0');if(i==m_str.GetLength()-1)a[z]=itemp;}else{itemp=itemp+rate*(m_str.GetAt(i)-'0');rate=rate/10;if(i==m_str.GetLength()-1)a[z]=itemp;}}else if(m_str.GetAt(i)=='.')rate=0.1;else if(m_str.GetAt(i)=='+') {a[z]=itemp;itemp=0;z++;b[z]='+';z++;rate=10.0;}else if(m_str.GetAt(i)=='-') {a[z]=itemp;itemp=0;z++;b[z]='-';z++;rate=10.0;}else if(m_str.GetAt(i)=='*')a[z]=itemp;itemp=0;z++;b[z]='*';z++;rate=10.0;}else if(m_str.GetAt(i)=='/'){a[z]=itemp;itemp=0;z++;b[z]='/';z++;rate=10.0;}}s=z;for(j=0;j<=s;j++){if(b[j]=='/'){a[j+1]=1/a[j+1];b[j]='*';}}for(j=0;j<=s;j++){if(b[j]=='*'){if(j-t==2){a[t-m]=a[t-m]*a[j+1];m=m+2;}elsea[j-1]=a[j-1]*a[j+1];a[j+1]=1000000.0;b[j]=' ';t=j;}}for(j=0;j<=s;j++){if(a[j]!=1000000.0) //如果a[i]的值不为0.0a[x]=a[j]; //把a[i]的值赋给a[x] x+=2; //x自加2}if(b[j]!=' ') //如果b[i]的值不为空格{b[y]=b[j]; //把b[i]的值赋给b[y]y=y+2; //y自加2}}for(j=0;j<=y-2;j++) {if(b[j]=='+') //如果b[i]等于加号a[0]=a[0]+a[j+1];else if(b[j]=='-') //如果b[i]等于减号a[0]=a[0]-a[j+1];}m_str.Format("%1f",a[0]);UpdateData(0);}“+”按钮对应的代码void CMyDlg::Onadd(){UpdateData(1);m_str+="+";UpdateData(0);}“-”按钮对应的代码void CMyDlg::Onjian(){UpdateData(1);m_str+="-";UpdateData(0);}“*”按钮对应的代码void CMyDlg::Oncheng(){UpdateData(1);m_str+="*";UpdateData(0);}“/”按钮对应的代码void CMyDlg::Onchu(){UpdateData(1);m_str+="/";UpdateData(0);}“AC”按钮对应的代码void CMyDlg::Onac(){UpdateData(1);m_str="0";pass1=1;UpdateData(0);}“DEL”按钮对应的代码void CMyDlg::Ondel(){UpdateData(1);if(m_str!="0" && m_str.GetLength()>1)m_str=m_str.Left(m_str.GetLength()-1);else{m_str="0";}UpdateData(0);}“.”按钮对应的代码void CMyDlg::Onpoint(){UpdateData(1);if(pass1==1)m_str=".";elsem_str+=".";pass1=0;UpdateData(0);}效果图。

可视化编程课程设计(含源码)计算器系统实现

可视化编程课程设计(含源码)计算器系统实现

设计题目:计算器系统实现1.分别用API与MFC编程来实现计算器的以下功能。

2.实现计算器的基本功能:连续数据的无优先级混合运算(加减乘除)3.可以实现其他附加功能:优先级运算,加入括号,加入其他函数运算功能等。

(不在要求范围之内)4.要求界面良好,功能完整。

一.基于MFC的简单计算器1.设计思路打开MFC应用操作界面,布局计算器界面,利用组框将计算器界面分为三个部分,一个是编辑输入,一个是数字界面,一个是功能键部分。

利用布局参考线对齐按钮,使界面美观。

然后就是对各个按钮进行属性设置,关联类设置,接着对各个按钮进行源代码编程。

最后,调试找出问题,解决问题,运行MFC成品计算器。

2.简单操作以及功能说明由于本人技术有限,所以本程序只能按照正确的计算运算顺序进行,该简单计算器能进行四则混合运算,除了加减乘除外,添加了一个括号,对于有些未知的错误,由于时间有限,并未来得及全面测试使用。

该简单计算器能实现四则运算,退格运算,清零运算,并且支持输出的结果保留给直接的下一个运算。

3.系统实现的各个模块1)编辑框模块由于编辑框模块需要连续输入字符串,所以在给编辑框建立类向导时,给编辑框定义的成员变量应该是字符串(String)变量。

编辑框模块用于运算算式的输入,以及结果的输出。

2)数字键模块数字键模块比较简单,该简单计算器数字键模块设置有0~9数字,还设置有小数点,以及正负数转换实现按钮。

数字键模块按钮在建立类向导时无需定义成员变量,但是需要定义按钮响应链接,用于实现点击按钮,在编辑框上显示点击按钮信息。

3)功能键模块功能键模块包括加减乘除基本按钮,以及一个输入错误是后能用于退格功能的退格键按钮,还有一个用于区别优先级运算的括号功能,当然有最重要的计算结果输入按钮,等于号按钮。

在编辑框附近还有一个功能键,就是清除功能键,用于清除编辑框,以便实现下一轮输入。

4.设计过程1)设计总流程图2)界面的设计3)建立的变量,控件的命名,对应的消息处理函数对应表ID CAPTION MessageHandler IDD_JISUANQI_DIALOG 简易计算器N/AIDC_NUM0 0 OnNum0IDC_NUM1 1 OnNum1IDC_NUM2 2 OnNum2IDC_NUM3 3 OnNum3IDC_NUM4 4 OnNum4IDC_NUM5 5 OnNum5IDC_NUM6 6 OnNum6IDC_NUM7 7 OnNum7IDC_NUM8 8 OnNum8IDC_NUM9 9 OnNum9IDC_OPER_ADD + OnOperAdd IDC_OPER_SUB - OnOperSub IDC_OPER_MULTI * OnOperMulti IDC_OPER_DIV / OnOperDiv IDC_ADD_SUB +/- OnAddSubIDC_POINT . OnPointIDC_EQUAL = OnEqualIDC_LBRACKET ( OnLbracket1)数字键模块void CJiSuanQiDlg::OnNum0(){if(calculated == TRUE) //已经按了等号,不让其再接受字符return;UpdateData(TRUE);//刷新编辑框界面calcutateString += "0";//存储输入的数字m_data += "0";//显示输入的数字UpdateData(FALSE);}2)功能键模块①加法功能键源程序void CJiSuanQiDlg::OnOperAdd(){if(calculated == TRUE)///其前一步按了= 号{calculated = FALSE;m_data = oldResult;double temp = atof(oldResult);//定义临时变量存储上一步结果if(temp < 0){calcutateString = "0" + oldResult;}else{calcutateString = oldResult;}calcutateString += "+";//存储做完该功能后的结果m_data += "+";//显示该步骤完成的结果UpdateData(FALSE);}else ///前一步不是={UpdateData(TRUE);calcutateString += "+";//直接存储此步操作m_data += "+";//直接显示此步操作UpdateData(FALSE);}}②退格功能键源程序void CJiSuanQiDlg::OnBackspeace(){if(calculated == FALSE){UpdateData(TRUE);int count = m_data.GetLength();if(count >= 1)//判断是否能执行退格操作{m_data = m_data.Left(count -1);count = calcutateString.GetLength();calcutateString = calcutateString.Left(count -1);UpdateData(FALSE);}}}③清除功能键源程序void CJiSuanQiDlg::OnClear(){// TODO: Add your control notification handler code herem_data = "";oldResult = "";calcutateString = "";calculated = FALSE;UpdateData(FALSE);}④括号功能键源程序void CJiSuanQiDlg::OnLbracket(){// TODO: Add your control notification handler code hereif(calculated == TRUE) ///已经按了等号,不让其再接受字符return;UpdateData(TRUE);calcutateString += "(";m_data += "(";UpdateData(FALSE);}⑤正负转换功能键源程序void CJiSuanQiDlg::OnAddSub(){// TODO: Add your control notification handler code hereif(calculated == FALSE){UpdateData(TRUE);calcutateString = calcutateString + "0" + "-";m_data += "-";UpdateData(FALSE);}}6.运行结果界面截图7.制作过程中所遇问题以及解决方法过程1)源代码编写错误通过查阅资料,请教同学,逐步一一解决。

MFC编程简单计算器

MFC编程简单计算器

第一步:设置界面,变量及函数首先打开VC,选择MFC AppWizard[exe],设定好路径和工程名(这里我设置工程名为为“My”)。

这里要注意的是在创建向导步骤1的时候,我们选择“基本对话框”。

之后我们可以点击完成便看到以下界面此时我们把当前页面上原配的控件按Delete全部清除(如下图)1、设置界面接着我们按照MFC自带的控件选项进行我们本次计算器的控件添加(以下是控件)我们在原先清空的界面中依次用上图控件画出一个基本的计算器页面(如下图)。

上图我们用按钮控件添加一共15个按钮,分别是数字“ 0 ~ 9”以及“+ - * /”。

每个控件“属性”都有属于它自己的ID,默认的按钮按键为IDC_BUTTON0,而且Cap当然我们为了“顾名思义”,对控件ID进行修改成我们容易辨认的(也可以不改),添加完控件并修改ID之后。

(如下图)这里我们把数字按钮0 设置ID为IDC_BUTTON14_NUM0,其他的依次类推2、添加变量添加3个成员变量和一个CEdit类的变量具体添加方法,就是右键主对话框CMyDlg->Add Member Variable 也可以是在菜单栏中选择“查看”->“建立类向导”这里我们把3个编辑框控件内的变量都改变为double型的(因为进行四则运算难免出现小数点)之后再在控件IDC_EDIT3中选择"Add Variable"并且数据类型选择 Control类型此时变量自动改为了 CEdit类这步的意思是说我们把编辑框控件3的设置为CEdit类并且设置一个成员对象是m_CResult。

3、添加消息相应函数完成修改ID后,就需给控件添加消息响应了,基本操作可以是直接双击控件,便会有向导提示。

MFC默认下了的响应信息都为On_开头,而且以下显示的是数字5的消息响应.之后所有的依次类推,这步骤一般不对成员函数名称做任何修改,直接点击OK即可到此为止我们基本上完成了计算器页面的前半部分预备工作,下来是我们的对控件具体实现代码的添加第2步:添加代码1、基本控件代码首先从加法开始void CMyDlg::OnButton1(){// TODO: Add your control notification handler code hereUpdateData();double n_result;n_result = m_num1 + m_num2;m_result = n_result;char sz[20];sprintf(sz,"%f",m_result);m_CResult.SetWindowText(sz);}UpdateData() 是MFC的窗口函数,用来刷新数据的由于我们进行基本运算需要更新数据所以必须添加这个函数。

mfc编写计算器程序

mfc编写计算器程序

计算器的介绍(1)在运行程序后,系统会弹出一个基于对话框的计算器界面,如下图所示:图1.1 计算器界面(2)在计算器程序中,主要通过一个编辑框来获取表达式和显示计算结果,表达式可以通过键盘和单击按钮2种方式输入,输入后的结果如下图所示:图1.2 输入表达式后的界面(3)在输入完表达式后,单击“=”后,开始对表达式进行计算,计算完成后,在编辑框中显示计算的结果。

图1.3 计算后的结果(4)计算器可以实现十进制转化为十六进制或二进制,其实现的操作为先输入一个十进制整数,再单击按钮“转化为二进制”或“转化为十六进制。

图1.4 输入一个十进制数100图1.5 100转化为二进制后的结果图1.6 100转化为十六进制后的结果(4)另外,计算器还可以实现一些简单的函数运算,实现的操作和十六进制/二进制转化类似,是先输入一个数字,在单击想要进行的函数的按钮,单击后就会在编辑框中显示运算的结果。

1算法的实现2.1把字符串转化为数字和运算符的算法(1)如果字符串中只有数字。

这个情况用来实现一些简单函数的运算。

在进行简单函数的运算时,都是先输入一个数字,再单击要进行运算的按钮,然后编辑框显示运算的结果。

程序用了一个函数double GetaStr(CString str)来实现这个功能,该函数以编辑框变量m_strResult为实参,再得到m_strResult的值后,调用GetAt函数,一个字符一个字符的读取,如果碰到整数,执行“itemp=itemp*rate+(str.GetAt(i)-'0');”,其中变量itemp初始值为0,变量rate初始值为10,如果碰到了小数点,改变rate的值,使其等于0.1,再向后继续读取,再碰到整数时执行“itemp=itemp+rate*(str.GetAt(i)-'0');rate=rate/10;”,函数的最后确定返回值为itemp。

以下是这个函数的代码[2]:double CMyDlg::GetaStr(CString str){int i=0;double rate=10.0,itemp=0.0;for(;i<str.GetLength();i++){if(isdigit(str.GetAt(i))) //如果字符串str.GetAt(i)的内容是整数{if(rate==10.0) //整数部分itemp=itemp*rate+(str.GetAt(i)-'0');//获得整数else //小数部分{itemp=itemp+rate*(str.GetAt(i)-'0');//获得小数rate=rate/10; //每次让rate小10倍}}else if(str.GetAt(i)=='.') //如果str.GetAt(i)是小数点rate=0.1; //让rate=0.1,开始计算小数部分 }return (itemp);}(2)如果字符串中有运算符和数字,但是没有括号。

MFC入门教程之简易计算器制作

MFC入门教程之简易计算器制作

MFC入门之简易计算器制作最近自学MFC,入门的时候走了不少弯路,所以特做此教程,希望能帮助一些人能够快速入门,少走一些弯路。

这个教程就是通过一个简易计算器的制作让大家了解MFC界面编程的基本步骤和几个常用控件的使用方法。

使用软件Visual C++ 6.0.首先,新建一个MFC基于对话框的工程。

点击文件-新建,在工程选项卡里选择MFC AppWizard[exe],给工程命名Jisuan。

点击确定。

在接下来的向导里选择基于对话框,其他选项使用默认即可,之间点击完成。

先给大家介绍一下Visual C++ 6.0的界面。

左边框起来的是文件资源控制区,默认有三个选项卡,分别是ClassView、ResourceView和FileView。

分别用来显示类、资源和文件。

中间这个主要操作区呢,就是我们用来设计界面和编程的窗口了。

现在这个是IDD_JISUAN_DIALOG资源,如图所示。

右边那个是控件工具箱,如果没有显示的话可以右击菜单栏空白区域,把控件前打上对号即可。

然后给大家介绍一下今天需要用到的控件。

如左图所示,今天主要需要用到四个控件。

第一个是静态文本控件,就是可以往对话框上放一些静态的文字。

第二个是编辑框,它是可以往里面输入文字的。

第三个是组合框,它是把用来给对话框分区,使界面更加美观明了。

第四个是按钮控件,是用来点一下产生某个操作的。

上面那个是编辑框,下面这个是按钮控件。

点一下控件,拖到对话框上,即可使用。

下面我们可以这样布局:上面两个编辑框里输入数字,中间四个按钮分别是+ - * /,然后下面编辑框里显示数字。

下面开始给大家介绍第一个最重要的操作,就是属性操作。

我们想让这些控件的显示文字改变,就需要修改它的属性。

选定某个控件,右击,选择属性,即可来改变它们的属性了。

我们挨个控件介绍。

首先是组合框。

组合框的属性,我们看到有一个ID,一个标题。

首先说明一点,每个控件都必须有一个ID值,而且一般每个控件的ID值不能相同。

mfc计算器实验报告

mfc计算器实验报告

C++程序设计设计性实验报告实验项目名称:高级计算器设计与开发专业班级:;姓名:;学号:实验起止日期:起于年月日止于年月日实验目的:学会用C++语言和数据结构知识实现表达式的解析与计算;学会使用动态链接库技术进行编程;学会编辑、编译、运行MFC应用程序的基本过程.学会MFC可视化编程技术。

实验要求:1.能完成双精度型数值的加、减、乘、除计算;编程中使用了动态连接库技术.2.能完成双精度型数值的加、减、乘、除计算;编程中使用了动态连接库技术;能实现表达式的输入,解析与计算实验内容:1.C++语言的顺序结构,分支结构,循环结构,函数,结构体,指针,MFC可视化编程技术。

2.数据结构中的二叉树数据组织、存贮、后序遍历及其操作。

3. 使用动态链接库进行函数模块的设计,实现计算功能。

实验具体方案:按照系统设计要求,用Visual C++设计和开发一个MFC应用程序---高级计算器。

计算器的界面设计、计算功能实现、算式计算和动态链接库的使用等。

提交由需求分析:系统设计说明、系统技术文档、系统使用说明书和源程序代码为附录构成的实验报告。

需求分析:系统设计说明1.计算器界面计算器界面包括主题“高级计算器”和背景图片以及电子日历。

在计算区上有显示文本框和数字按钮以及运算符按钮。

在计算区上部分有运算模式选择模块和小提示语句。

2.模块功能简介系统分为多个模块,分别为计算模块、错误分析模块、界面显示模块和模式选择模块。

其中计算模块用来进行各种基本的加、减、乘、除的运算并且显示运算结果;错误分析模块用来进行错误处理;界面显示模块用来美化计算器界面;模式选择模块用来进行运算模式的选择和切换,以实现不同的运算要求。

3.系统结构图系统技术文档1.系统各模块主要流程图(1) 单步运算流程图(2) 算式运算流程图2.软件总体测试方案与测试记录运行程序,然后查看计算器界面和设计是否相同,进行运算模式的切换,看是否能正确的进行模式切换,查看日历显示是否正确。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

// cacuDlg.cpp : implementation file//#include "stdafx.h"#include "cacu.h"#include "cacuDlg.h"#include "math.h"#include "cstring"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MSG_MAP(CAboutDlg)// No message handlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CCacuDlg dialogCCacuDlg::CCacuDlg(CWnd* pParent /*=NULL*/): CDialog(CCacuDlg::IDD, pParent){//{{AFX_DATA_INIT(CCacuDlg)m_s = _T("");m_M = _T("");p=0,q=0,w=1,c='r';Ispoint=false;//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CCacuDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CCacuDlg)DDX_Text(pDX, IDC_EDIT1, m_s);DDX_Text(pDX, IDC_EDIT2, m_M);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CCacuDlg, CDialog)//{{AFX_MSG_MAP(CCacuDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)ON_BN_CLICKED(IDC_BackSpace, OnBackSpace) ON_BN_CLICKED(IDC_Clear2, OnClear)ON_BN_CLICKED(IDC_1, On1)ON_BN_CLICKED(IDC_2, On2)ON_BN_CLICKED(IDC_3, On3)ON_BN_CLICKED(IDC_4, On4)ON_BN_CLICKED(IDC_5, On5)ON_BN_CLICKED(IDC_6, On6)ON_BN_CLICKED(IDC_7, On7)ON_BN_CLICKED(IDC_8, On8)ON_BN_CLICKED(IDC_9, On9)ON_BN_CLICKED(IDC_add, Onadd)ON_BN_CLICKED(IDC_Sub, OnSub)ON_BN_CLICKED(IDC_Mul, OnMul)ON_BN_CLICKED(IDC_div, Ondiv)ON_BN_CLICKED(IDC_Sqrt, OnSqrt)ON_BN_CLICKED(IDC_point, Onpoint)ON_BN_CLICKED(IDC_0, On0)ON_BN_CLICKED(IDC_Sin, OnSin)ON_BN_CLICKED(IDC_Cos, OnCos)ON_BN_CLICKED(IDC_power_2, Onpower2)ON_BN_CLICKED(IDC_power_3, Onpower3)ON_BN_CLICKED(IDC_Equar, OnEquar)ON_BN_CLICKED(IDC_1_x, On1x)ON_BN_CLICKED(IDC_1_100, On1100)ON_BN_CLICKED(IDC_MS, OnMs)ON_BN_CLICKED(IDC_MC, OnMc)ON_BN_CLICKED(IDC_MR, OnMr)ON_BN_CLICKED(IDC_Madd, OnMadd)ON_BN_CLICKED(IDC_Msub, OnMsub)ON_EN_CHANGE(IDC_EDIT2, OnM)ON_BN_CLICKED(IDC_sub_add, Onsubadd)ON_BN_CLICKED(IDC_CE, OnCe)ON_BN_CLICKED(IDC_PI, OnPi)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CCacuDlg message handlersBOOL CCacuDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization herem_s="0.";UpdateData(false);m_s="";CFont *m_Font;m_Font = new CFont;m_Font->CreateFont(50,20,0,0,100,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_SWISS,"Arial");CEdit *m_Edit1=(CEdit *)GetDlgItem(IDC_EDIT1);m_Edit1->SetFont(m_Font,FALSE);GetDlgItem(IDC_EDIT1)->SetFont(m_Font);return TRUE; // return TRUE unless you set the focus to a control}void CCacuDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below// to draw the icon. For MFC applications using the document/view model,// this is automatically done for you by the framework.void CCacuDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}// The system calls this to obtain the cursor to display while the user drags// the minimized window.HCURSOR CCacuDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}void CCacuDlg::OnChangeEdit1(){// TODO: If this is a RICHEDIT control, the control will not// send this notification unless you override the CDialog::OnInitDialog() // function and call CRichEditCtrl().SetEventMask()// with the ENM_CHANGE flag ORed into the mask.// TODO: Add your control notification handler code here}void CCacuDlg::OnBackSpace(){// TODO: Add your control notification handler code hereint uu=0;m_s.Delete(m_s.GetLength()-1,1);if(w==1)temp1=atof(m_s);elsetemp2=atof(m_s);if(m_s.Find('.')<0)Ispoint=false;elseIspoint=true;if(m_s.GetLength()==0){m_s="0.";uu=1;c='r';}if(!uu&&!Ispoint)m_s+=".";UpdateData(false);if(!uu&&!Ispoint)m_s.Delete(m_s.GetLength()-1,1);if(uu==1)m_s="";}void CCacuDlg::OnClear(){// TODO: Add your control notification handler code here UpdateData(true);m_s="0.";temp2=temp1=0;w=1;c='r';UpdateData(false);m_s="";}void CCacuDlg::On1(){// TODO: Add your control notification handler code here if(p==1){m_s="";UpdateData(false);p=0;}m_s=m_s+"1";if(!Ispoint)m_s+=".";UpdateData(false);if(!Ispoint)m_s.Delete(m_s.GetLength()-1,1);if(w==1)temp1=atof(m_s),temp2=0;else if(w==2)temp2=atof(m_s);//c='1';}void CCacuDlg::On2(){// TODO: Add your control notification handler code here if(p==1){m_s="";UpdateData(false);p=0;}//UpdateData(true);m_s=m_s+"2";if(!Ispoint)UpdateData(false);//c='1';if(!Ispoint)m_s.Delete(m_s.GetLength()-1,1);if(w==1)temp1=atof(m_s),temp2=0;else if(w==2)temp2=atof(m_s);}void CCacuDlg::On3(){// TODO: Add your control notification handler code here if(p==1){m_s="";UpdateData(false);p=0;}//UpdateData(true);m_s=m_s+"3";if(!Ispoint)m_s+=".";UpdateData(false);if(!Ispoint)m_s.Delete(m_s.GetLength()-1,1);if(w==1)temp1=atof(m_s),temp2=0;else if(w==2)temp2=atof(m_s);//c='1';}void CCacuDlg::On4(){// TODO: Add your control notification handler code here if(p==1){m_s="";UpdateData(false);p=0;}//UpdateData(true);if(!Ispoint)m_s+=".";UpdateData(false);if(!Ispoint)m_s.Delete(m_s.GetLength()-1,1);//c='1';if(w==1)temp1=atof(m_s),temp2=0;else if(w==2)temp2=atof(m_s);}void CCacuDlg::On5(){// TODO: Add your control notification handler code here if(p==1){m_s="";UpdateData(false);p=0;}//UpdateData(true);m_s=m_s+"5";if(!Ispoint)m_s+=".";UpdateData(false);if(!Ispoint)m_s.Delete(m_s.GetLength()-1,1);//c='1';if(w==1)temp1=atof(m_s);else if(w==2)temp2=atof(m_s);}void CCacuDlg::On6(){// TODO: Add your control notification handler code here if(p==1){m_s="";UpdateData(false);p=0;}//UpdateData(true);m_s=m_s+"6";if(!Ispoint)m_s+=".";UpdateData(false);if(!Ispoint)m_s.Delete(m_s.GetLength()-1,1);//c='1';if(w==1)temp1=atof(m_s),temp2=0;else if(w==2)temp2=atof(m_s);}void CCacuDlg::On7(){// TODO: Add your control notification handler code here if(p==1){m_s="";UpdateData(false);p=0;}m_s=m_s+"7";if(!Ispoint)m_s+=".";UpdateData(false);if(!Ispoint)m_s.Delete(m_s.GetLength()-1,1);//c='1';if(w==1)temp1=atof(m_s),temp2=0;else if(w==2)temp2=atof(m_s);}void CCacuDlg::On8(){// TODO: Add your control notification handler code here if(p==1){m_s="";UpdateData(false);}//UpdateData(true);m_s=m_s+"8";if(!Ispoint)m_s+=".";UpdateData(false);if(!Ispoint)m_s.Delete(m_s.GetLength()-1,1);//c='1';if(w==1)temp1=atof(m_s),temp2=0;else if(w==2)temp2=atof(m_s);}void CCacuDlg::On9(){// TODO: Add your control notification handler code here if(p==1){m_s="";UpdateData(false);p=0;}m_s=m_s+"9";if(!Ispoint)m_s+=".";UpdateData(false);if(!Ispoint)m_s.Delete(m_s.GetLength()-1,1);if(w==1)temp1=atof(m_s),temp2=0;else if(w==2)temp2=atof(m_s);}void CCacuDlg::On0(){// TODO: Add your control notification handler code here if(p==1){m_s="";UpdateData(false);}//UpdateData(true);m_s=m_s+"0";if(!Ispoint)m_s+=".";UpdateData(false);if(!Ispoint)m_s.Delete(m_s.GetLength()-1,1);//c='1';if(w==1)temp1=atof(m_s),temp2=0;else if(w==2)temp2=atof(m_s);}void CCacuDlg::Onadd(){// TODO: Add your control notification handler code here UpdateData(true);Ispoint=false;p=1;if(w==2){if(c=='+')temp1=temp2+temp1;else if(c=='-')temp1=temp1-temp2;else if(c=='*')temp1*=temp2;else if(c=='/')temp1/=temp2;else if(c=='s')temp1=sin(atof(m_s));else if(c=='c')temp1=cos(atof(m_s));m_s.Format("%.10lf",temp1);//m_s+=".";int n;n=m_s.Find('.');if (n>=0){m_s.TrimRight('0');if (m_s.GetLength()==n+1){m_s=m_s.Left(n+1);if (m_s.IsEmpty())m_s='0';}}UpdateData(false);}w=2;c='+';//Ispoint=false;//UpdateData(false);}void CCacuDlg::OnSub(){// TODO: Add your control notification handler code here UpdateData(true);Ispoint=false;p=1;if(w==2){if(c=='+')temp1=temp2+temp1;else if(c=='-')temp1=temp1-temp2;else if(c=='*')temp1*=temp2;else if(c=='/')temp1/=temp2;else if(c=='s')temp1=sin(atof(m_s));else if(c=='c')temp1=cos(atof(m_s));m_s.Format("%.10lf",temp1);int n;n=m_s.Find('.');if (n>=0){m_s.TrimRight('0');if (m_s.GetLength()==n+1){m_s=m_s.Left(n+1);if (m_s.IsEmpty())m_s='0';}}UpdateData(false);}w=2;c='-';//Ispoint=false;//UpdateData(false);}void CCacuDlg::OnMul(){// TODO: Add your control notification handler code here UpdateData(true);Ispoint=false;p=1;if(w==1)temp2=1;else{if(c=='+')temp1=temp2+temp1;else if(c=='-')temp1=temp1-temp2;else if(c=='*')temp1*=temp2;else if(c=='/')temp1/=temp2;else if(c=='s')temp1=sin(atof(m_s));else if(c=='c')temp1=cos(atof(m_s));m_s.Format("%.10lf",temp1);int n;n=m_s.Find('.');if (n>=0){m_s.TrimRight('0');if (m_s.GetLength()==n+1){m_s=m_s.Left(n+1);if (m_s.IsEmpty())m_s='0';}}UpdateData(false);}c='*';w=2;//Ispoint=false;}void CCacuDlg::Ondiv(){// TODO: Add your control notification handler code here UpdateData(true);Ispoint=false;p=1;if(w==1)temp2=1.0;else{if(c=='+')temp1=temp2+temp1;else if(c=='-')temp1=temp1-temp2;else if(c=='*')temp1*=temp2;else if(c=='/')temp1/=temp2;else if(c=='s')temp1=sin(atof(m_s));else if(c=='c')temp1=cos(atof(m_s));m_s.Format("%.10lf",temp1);int n;n=m_s.Find('.');if (n>=0){m_s.TrimRight('0');if (m_s.GetLength()==n+1){m_s=m_s.Left(n+1);if (m_s.IsEmpty())m_s='0';}}UpdateData(false);}c='/';w=2;}void CCacuDlg::OnSqrt(){// TODO: Add your control notification handler code here Ispoint=false;temp1=sqrt(atof(m_s));m_s.Format("%.10lf",temp1);int n;n=m_s.Find('.');if (n>=0){m_s.TrimRight('0');if (m_s.GetLength()==n+1){m_s=m_s.Left(n+1);if (m_s.IsEmpty())m_s='0';}}p=q=1;w=1;c='r';UpdateData(false);}void CCacuDlg::Onpoint(){// TODO: Add your control notification handler code here if(p==1){m_s="";UpdateData(false);p=0;}//UpdateData(true);m_s=m_s+".";Ispoint=true;UpdateData(false);}void CCacuDlg::OnSin(){// TODO: Add your control notification handler code here c='s';p=q=1;w=2;}void CCacuDlg::OnCos(){// TODO: Add your control notification handler code here c='c';p=q=1;w=2;}void CCacuDlg::Onpower2(){// TODO: Add your control notification handler code here Ispoint=false;temp1=atof(m_s);temp1=temp1*temp1;m_s.Format("%.10lf",temp1);int n;n=m_s.Find('.');if (n>=0){m_s.TrimRight('0');if (m_s.GetLength()==n+1){m_s=m_s.Left(n+1);if (m_s.IsEmpty())m_s='0';}}p=q=1;w=1;c='r';UpdateData(false);}void CCacuDlg::Onpower3(){// TODO: Add your control notification handler code here Ispoint=false;temp1=atof(m_s);temp1=temp1*temp1*temp1;m_s.Format("%.10lf",temp1);int n;n=m_s.Find('.');if (n>=0){m_s.TrimRight('0');if (m_s.GetLength()==n+1){m_s=m_s.Left(n+1);if (m_s.IsEmpty())m_s='0';}}p=q=1;w=1;c='r';UpdateData(false);}void CCacuDlg::OnEquar(){// TODO: Add your control notification handler code here int yy=0;if(c=='+'||c=='r')temp=temp1+temp2;else if(c=='-')temp=temp1-temp2;else if(c=='*')temp=temp1*temp2;else if(c=='/'){if(temp2==0)yy=1;elsetemp=temp1/temp2;}else if(c=='s')temp=sin(atof(m_s));else if(c=='c')temp=cos(atof(m_s));m_s.Format("%.10lf",temp),temp1=temp;//m_s+=".";int n;n=m_s.Find('.');//UpdateData(false);if (n>=0){m_s.TrimRight('0');if (m_s.GetLength()==n+1){m_s=m_s.Left(n+1);if (m_s.IsEmpty())m_s='0';}}p=1;w=1;Ispoint=false;//temp1=temp;c='r';if(yy==1)m_s="除数不能为0";UpdateData(false);if(yy==1)m_s=="";}void CCacuDlg::On1x(){// TODO: Add your control notification handler code here int yy=0;if(m_s=="0")yy=1;elsetemp1=1.0/atof(m_s);m_s.Format("%.10lf",temp1);int n;n=m_s.Find('.');if (n>=0){m_s.TrimRight('0');if (m_s.GetLength()==n+1){m_s=m_s.Left(n+1);if (m_s.IsEmpty())m_s='0';}}p=1;w=1;c='r';Ispoint=false;if(yy==1)m_s="分母不能为0",yy=1;UpdateData(false);if(yy==1)m_s="";}void CCacuDlg::On1100(){// TODO: Add your control notification handler code here //if(p==1)Ispoint=false;int yy=0;if(c=='+'||c=='r')temp=temp1+temp2;else if(c=='-')temp=temp1-temp2;else if(c=='*')temp=temp1*temp2;else if(c=='/'){if(temp2==0)yy=1;elsetemp=temp1/temp2;}else if(c=='s')temp=sin(atof(m_s));else if(c=='c')temp=cos(atof(m_s));m_s.Format("%.10lf",temp),temp1=temp;m_s.Format("%.10lf",temp/100.0);int n;n=m_s.Find('.');if (n>=0){m_s.TrimRight('0');if (m_s.GetLength()==n+1){m_s=m_s.Left(n+1);if (m_s.IsEmpty())m_s='0';}}p=1;w=1,c='r';UpdateData(false);}void CCacuDlg::OnMs(){// TODO: Add your control notification handler code here UpdateData(true);M=atof(m_s);m_M="M";p=1;UpdateData(false);}void CCacuDlg::OnMc(){// TODO: Add your control notification handler code here M=0;m_M="";UpdateData(false);}void CCacuDlg::OnMr(){// TODO: Add your control notification handler code here Ispoint=false;m_s.Format("%.10lf",M);int n;n=m_s.Find('.');if (n>=0){m_s.TrimRight('0');if (m_s.GetLength()==n+1){m_s=m_s.Left(n+1);if (m_s.IsEmpty())m_s='0';}}p=1;//m_s.Delete(m_s.GetLength()-1,1);UpdateData(false);temp2=M;w=2;}void CCacuDlg::OnMadd(){// TODO: Add your control notification handler code hereM+=atof(m_s);c='1';}void CCacuDlg::OnMsub(){// TODO: Add your control notification handler code hereM-=atof(m_s);}void CCacuDlg::OnM(){// TODO: If this is a RICHEDIT control, the control will not// send this notification unless you override the CDialog::OnInitDialog() // function and call CRichEditCtrl().SetEventMask()// with the ENM_CHANGE flag ORed into the mask.// TODO: Add your control notification handler code here}void CCacuDlg::Onsubadd(){// TODO: Add your control notification handler code here//Ispoint=false;if(m_s[0]=='-')m_s.Delete(0,1);elsem_s.Insert(0,'-');if(w==1)temp1=atof(m_s);else if(w==2)temp2=atof(m_s);int n;n=m_s.Find('.');if (n>=0){m_s.TrimRight('0');if (m_s.GetLength()==n+1){m_s=m_s.Left(n);if (m_s.IsEmpty())m_s='0';}}m_s+=".";UpdateData(false);m_s.Delete(m_s.GetLength()-1,1);}void CCacuDlg::OnCe(){// TODO: Add your control notification handler code here m_s="0.";UpdateData(false);m_s="";}void CCacuDlg::OnPi(){// TODO: Add your control notification handler code here m_s="3.1415926";UpdateData(false);}。

相关文档
最新文档