资源下载
代码失效可以联系本人:
15377920718
当然你也可以通过给我的Github项目点赞来免费的向我获取代码
效果演示
MFC制作简单的计算器(VS2019实现)
VS2019可以用于制作简单的计算器,用的是MFC,通过设立button以及编辑框,并对编辑框插入相对应变量
双击按钮,可以进入对该按钮的编辑(代码设置)。
同理,每次要对一个按钮进行相应操作,就需要设置相对应的代码。
之后便是编写相对应的代码。
本文参考了别人的代码并进行整合。现直接贴出,只需要改变按钮对应的序号便可以直接使用了!!
calculationDlg.h 头文件
// calculationDlg.h: 头文件 // #pragma once // CcalculationDlg 对话框 class CcalculationDlg : public CDialogEx { // 构造 public: CcalculationDlg(CWnd* pParent = nullptr); // 标准构造函数 // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_CALCULATION_DIALOG }; #endif public: double num1; double num2; //定义一个整形数据保存编辑框中符号之前(包括符号)字符串的长度 int slength; //定义一个char型来记录输入的符号 char c = '0'; //定义一个函数实现运算 protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: HICON m_hIcon; // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: afx_msg void OnEnChangeEdit1(); CEdit m_edit; CString m_str; afx_msg void OnBnClickedButton2(); void CcalculationDlg::savevalue1() { CString m_str1; UpdateData(TRUE);//用来读取编辑框中的m_str内容 if (m_str[0] == '(')//如果第一个操作数用括号括起来了,则不读入括号 { m_str1 = m_str.Right(m_str.GetLength() - 1); m_str1 = m_str1.Left(m_str1.GetLength() - 1); num1 = _ttof(m_str1);//将CString类型转换为double类型 } else num1 = _ttof(m_str);//将CString类型转换为double类型 UpdateData(FALSE);//显示更新编辑框的内容,即将m_str的内容显示 } void CcalculationDlg::calculate() { UpdateData(TRUE); num2 = _ttof(m_str.Right(m_str.GetLength() - slength));//读取第二个操作数 double result = 0.0; if (c == '+') { result = num1 + num2; } else if (c == '-') { result = num1 - num2; } else if (c == '*') { result = num1 * num2; } else if (c == '/') { if (num2 == 0.0f) { MessageBox(TEXT("除数不能为0,请重新输入")); } else { result = num1 / num2; } } else if (c == '^')//表示指数 { result = pow(num1, num2); } else if (c == '!')//表示阶乘 { result = 1.0; for (long long i = 1; i <= long long(num1); i++) result *= i; } else if (c == '1')//表示根号 { result = sqrt(num1); } else if (c == '2')//表示sin { long long num = num2; num %= 360; num1 = num; num1 = num1 / 180 * 3.1415926; double item = num1; result = num1; long long i = 1; do { item = -item * num1 * num1 / ((2 * i) * (2 * i + 1)); result += item;//sinx=x-x^3/3!+x^5/5!-x^7/7!+... i++; } while (fabs(item) >= 1e-5);//当精度达到10的五次方时跳出 } else if (c == '3')//表示tan { long long num = num2; num %= 180; if (num == 90 || num == -90)//去除不再范围内的数 { MessageBox(TEXT("此值不在正切函数的有效区域内,请重新输入")); } else { num1 = num;//将大度数化小 num1 = num1 / 180 * 3.1415926;//化为弧度制 result = tan(num1); } } else if (c == '4')//表示cos { long long num = num2; num %= 360; num1 = num; num1 = num1 / 180 * 3.1415926; double item = 1; result = 1; long long i = 1; do { item = -item * num1 * num1 / ((2 * i) * (2 * i - 1)); result += item;//cosx=1-x^2/2!+x^4/4!-x^6/6!+... i++; } while (fabs(item) >= 1e-5);//当精度达到10的五次方时跳出 } else if (c == '5')//标志十进制转为其它进制 { if (num2 == 2)//十进制转为二进制 { CString test;//记录结果 long long T = num1;//记录整数部分 bool judge = true;//判断正负号,正为true,负为false if (T < 0) { T = -T; judge = false; } test.Format(TEXT("%lf"), num1);//将需要转化的十进制数变为字符串,方便取小数部分 double t;//记录小数部分 int pos = test.Find('.'); if (pos == -1) t = 0; else { test = test.Right(test.GetLength() - pos);//取小数部分字符串 t = _ttof(test); } test = "";//将字符串清空,方便后面记录二进制数 CString test1; test1 = "";//记录余数,将余数反转即为二进制数 long long T1 = 0; while (T) { test1 += char((T % 2) + 48); T /= 2; } for (int i = test1.GetLength() - 1; i >= 0; i--) test += test1[i];//反转余数排列 test += '.';//加入小数点 int len = test.GetLength() - 1; while (len <= 32) { t *= 2; if (t >= 1) { test += '1'; t -= 1.0; } else test += '0'; len++; } if (!judge) m_str = '-' + test; else m_str = test; m_str += "B";//表示二进制 return; } else if (num2 == 8)//转为八进制数 { CString test;//记录结果 long long T = num1;//记录整数部分 bool judge = true;//判断正负号,正为true,负为false if (T < 0) { T = -T; judge = false; } test.Format(TEXT("%lf"), num1);//将需要转化的十进制数变为字符串,方便取小数部分 double t;//记录小数部分 int pos = test.Find('.'); if (pos == -1) t = 0; else { test = test.Right(test.GetLength() - pos);//取小数部分字符串 t = _ttof(test); } test = "";//将字符串清空,方便后面记录八进制数 CString test1; test1 = "";//记录余数,将余数反转即为八进制数 long long T1 = 0; while (T) { test1 += char((T % 8) + 48); T /= 8; } for (int i = test1.GetLength() - 1; i >= 0; i--) test += test1[i];//反转余数排列 test1 = "";//将字符串清零,用来记录小数部分的二进制数 test += '.';//加入小数点 int len = 3 * (test.GetLength() - 1); while (len <= 32)//先将小数部分转化为二进制 { t *= 2; if (t >= 1) { test1 += '1'; t -= 1.0; } else test1 += '0'; len++; } //将二进制小数转化为八进制 CString test2;//依次取前面三位数字转为八进制数 while (test1.GetLength() >= 3) { test2 = test1.Left(3); test1 = test1.Right(test1.GetLength() - 3);//去掉前面已经遍历过的三位数字 int num = 0; for (int i = 0; i < 3; i++) { if (test2[i] == '1') { num += pow(2, 2 - i); } } test = test + char(num + 48); } if (!judge) m_str = '-' + test; else m_str = test; m_str += "o";//表示八进制 return; } else if (num2 == 16) { // MessageBox(TEXT("还未实现")); CString test;//记录结果 char a[6] = { 'A','B','C','D','E','F' };//十六进制表示符 long long T = num1;//记录整数部分 bool judge = true;//判断正负号,正为true,负为false if (T < 0) { T = -T; judge = false; } test.Format(TEXT("%lf"), num1);//将需要转化的十进制数变为字符串,方便取小数部分 double t;//记录小数部分 int pos = test.Find('.'); if (pos == -1) t = 0; else { test = test.Right(test.GetLength() - pos);//取小数部分字符串 t = _ttof(test); } test = "";//将字符串清空,方便后面记录八进制数 CString test1; test1 = "";//记录余数,将余数反转即为八进制数 long long T1 = 0; while (T) { int z = T % 16;//记录余数 if (z < 10) test1 += char(z + 48); else test1 += a[z - 10]; T /= 16; } for (int i = test1.GetLength() - 1; i >= 0; i--) test += test1[i];//反转余数排列 test1 = "";//将字符串清零,用来记录小数部分的二进制数 test += '.';//加入小数点 int len = 4 * (test.GetLength() - 1); while (len <= 32)//先将小数部分转化为二进制 { t *= 2; if (t >= 1) { test1 += '1'; t -= 1.0; } else test1 += '0'; len++; } //将二进制小数转化为十六进制 CString test2;//依次取前面三位数字转为八进制数 while (test1.GetLength() >= 4) { test2 = test1.Left(4); test1 = test1.Right(test1.GetLength() - 4);//去掉前面已经遍历过的四位数字 int num = 0; for (int i = 0; i < 4; i++) { if (test2[i] == '1') { num += pow(2, 2 - i); } } if (num < 10) test = test + char(num + 48); else test = test + a[num - 10]; } if (!judge) m_str = '-' + test; else m_str = test; m_str += "H";//表示十六进制 return; } else { MessageBox(TEXT("计算器不支持该进制,请重新输入(二进制或八进制或十六进制)")); m_str = ""; return; } } else if (c == '6')//转回十进制 { m_str = m_str.Left(m_str.GetLength() - 4); if (m_str.Right(1) != 'o' && m_str.Right(1) != 'H' && m_str.Right(1) != 'B') { return; } else result = num1; } else if (c == '7')//表示对数log { if (num1 < 0 || num2 < 0 || num1 == 1) { MessageBox(TEXT("该对数无效,请重新输入!")); m_str = ""; return; } else result = log(num2) / log(num1); } else if (c == '8')//计算e^x { double item = 1; result = 1; int i = 1; do { item = item * num2 / i; i++; result += item; } while (fabs(item) > 1e-6); } m_str.Format(TEXT("%f"), result); c = '0';//表示默认无符号输入 UpdateData(FALSE); } afx_msg void OnBnClickedButton31(); afx_msg void OnBnClickedButton5(); afx_msg void OnBnClickedButton20(); afx_msg void OnBnClickedButton22(); afx_msg void OnBnClickedButton1(); afx_msg void OnBnClickedButton3(); afx_msg void OnBnClickedButton4(); afx_msg void OnBnClickedButton24(); afx_msg void OnBnClickedButton25(); afx_msg void OnBnClickedButton26(); afx_msg void OnBnClickedButton13(); afx_msg void OnBnClickedButton17(); afx_msg void OnBnClickedButton21(); afx_msg void OnBnClickedButton29(); afx_msg void OnBnClickedButton27(); afx_msg void OnBnClickedButton30(); afx_msg void OnBnClickedButton28(); afx_msg void OnBnClickedButton9(); afx_msg void OnBnClickedButton23(); afx_msg void OnBnClickedButton6(); afx_msg void OnBnClickedButton7(); afx_msg void OnBnClickedButton8(); afx_msg void OnBnClickedButton10(); afx_msg void OnBnClickedButton11(); afx_msg void OnBnClickedButton12(); afx_msg void OnBnClickedButton14(); afx_msg void OnBnClickedButton15(); afx_msg void OnBnClickedButton16(); afx_msg void OnBnClickedButton19(); afx_msg void OnBnClickedButton18(); afx_msg void OnBnClickedButton32(); };
cpp文件
// calculationDlg.cpp: 实现文件 // #include "pch.h" #include "framework.h" #include "calculation.h" #include "calculationDlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_ABOUTBOX }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CcalculationDlg 对话框 CcalculationDlg::CcalculationDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_CALCULATION_DIALOG, pParent) , m_str(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CcalculationDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_EDIT1, m_edit); DDX_Text(pDX, IDC_EDIT1, m_str); } BEGIN_MESSAGE_MAP(CcalculationDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_EN_CHANGE(IDC_EDIT1, &CcalculationDlg::OnEnChangeEdit1) ON_BN_CLICKED(IDC_BUTTON2, &CcalculationDlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON5, &CcalculationDlg::OnBnClickedButton5) ON_BN_CLICKED(IDC_BUTTON20, &CcalculationDlg::OnBnClickedButton20) ON_BN_CLICKED(IDC_BUTTON22, &CcalculationDlg::OnBnClickedButton22) ON_BN_CLICKED(IDC_BUTTON1, &CcalculationDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON3, &CcalculationDlg::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON4, &CcalculationDlg::OnBnClickedButton4) ON_BN_CLICKED(IDC_BUTTON24, &CcalculationDlg::OnBnClickedButton24) ON_BN_CLICKED(IDC_BUTTON25, &CcalculationDlg::OnBnClickedButton25) ON_BN_CLICKED(IDC_BUTTON26, &CcalculationDlg::OnBnClickedButton26) ON_BN_CLICKED(IDC_BUTTON13, &CcalculationDlg::OnBnClickedButton13) ON_BN_CLICKED(IDC_BUTTON17, &CcalculationDlg::OnBnClickedButton17) ON_BN_CLICKED(IDC_BUTTON21, &CcalculationDlg::OnBnClickedButton21) ON_BN_CLICKED(IDC_BUTTON29, &CcalculationDlg::OnBnClickedButton29) ON_BN_CLICKED(IDC_BUTTON27, &CcalculationDlg::OnBnClickedButton27) ON_BN_CLICKED(IDC_BUTTON30, &CcalculationDlg::OnBnClickedButton30) ON_BN_CLICKED(IDC_BUTTON28, &CcalculationDlg::OnBnClickedButton28) ON_BN_CLICKED(IDC_BUTTON9, &CcalculationDlg::OnBnClickedButton9) ON_BN_CLICKED(IDC_BUTTON23, &CcalculationDlg::OnBnClickedButton23) ON_BN_CLICKED(IDC_BUTTON6, &CcalculationDlg::OnBnClickedButton6) ON_BN_CLICKED(IDC_BUTTON7, &CcalculationDlg::OnBnClickedButton7) ON_BN_CLICKED(IDC_BUTTON8, &CcalculationDlg::OnBnClickedButton8) ON_BN_CLICKED(IDC_BUTTON10, &CcalculationDlg::OnBnClickedButton10) ON_BN_CLICKED(IDC_BUTTON11, &CcalculationDlg::OnBnClickedButton11) ON_BN_CLICKED(IDC_BUTTON12, &CcalculationDlg::OnBnClickedButton12) ON_BN_CLICKED(IDC_BUTTON14, &CcalculationDlg::OnBnClickedButton14) ON_BN_CLICKED(IDC_BUTTON15, &CcalculationDlg::OnBnClickedButton15) ON_BN_CLICKED(IDC_BUTTON16, &CcalculationDlg::OnBnClickedButton16) ON_BN_CLICKED(IDC_BUTTON19, &CcalculationDlg::OnBnClickedButton19) ON_BN_CLICKED(IDC_BUTTON18, &CcalculationDlg::OnBnClickedButton18) ON_BN_CLICKED(IDC_BUTTON32, &CcalculationDlg::OnBnClickedButton32) END_MESSAGE_MAP() // CcalculationDlg 消息处理程序 BOOL CcalculationDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != nullptr) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CcalculationDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CcalculationDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int 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; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CcalculationDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CcalculationDlg::OnEnChangeEdit1() { // TODO: 如果该控件是 RICHEDIT 控件,它将不 // 发送此通知,除非重写 CDialogEx::OnInitDialog() // 函数并调用 CRichEditCtrl().SetEventMask(), // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO: 在此添加控件通知处理程序代码 } void CcalculationDlg::OnBnClickedButton2() // +号 { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE);//用来读取编辑框中的m_str内容 if (m_str.Right(1) != '(')//如果前面没有括号,则输入的是运算符,否则就是正号 { savevalue1();//读取第一个操作数 if (c != '0') calculate(); savevalue1();//读取第一个操作数 c = '+'; slength = m_str.GetLength() + 1;//后面会看到slength的用处 } m_str = m_str + '+'; UpdateData(FALSE);//显示更新编辑框的内容,即将m_str的内容显示 } void CcalculationDlg::OnBnClickedButton5() //说明 { MessageBox(TEXT("此计算器可以实现简单的加、减、乘、除等运算,对于操作数直接在键盘上输入即可,运算符请选择计算器中限定的运算符;\n注意事项:\n一、如果第二个操作数想输入负数,需在运算符后面将第二个数据括起来;\n二、对于正弦、余弦、正切、阶乘、开方等计算,请先按运算符按键,再输入角度值或数值,比如计算90度的正弦值:sin+90(非弧度制);\n三、对于“转为其它进制”的按键,这里只提供二进制(B)、八进制(O)以及十六进制(H)三种进制,输入其它进制均视为无效输入,输入格式为(需转换的数)->(进制基数)\n四、对于log对数的输入格式要求:先输入底数(非负数且不等于1)+log+真数(非负数);\n五、该计算器每次运算只支持两个操作数,如果想连续运算,可在结果后继续操作"), TEXT("使用说明")); } void CcalculationDlg::OnBnClickedButton20() //后退 { UpdateData(TRUE);//将屏幕中的数据转换到变量中 if (!m_str.IsEmpty())//如果字符串不为空 { if (m_str.Right(1) == '*' || m_str.Right(1) == '+' || m_str.Right(1) == '-' || m_str.Right(1) == '/' || m_str.Right(1) == '^' || m_str.Right(1) == '!') c = '0'; m_str = m_str.Left(m_str.GetLength() - 1); } UpdateData(FALSE);//将变量中的信息显示到相应的框中 } void CcalculationDlg::OnBnClickedButton22() //清零 { UpdateData(TRUE); m_str = ""; UpdateData(FALSE); } void CcalculationDlg::OnBnClickedButton1() //减法 { if (m_str.Right(1) != '(')//如果前面没有括号,则输入的是运算符,否则就是负号 { savevalue1();//读取第一个操作数 if (c != '0') calculate(); savevalue1();//读取第一个操作数 c = '-'; slength = m_str.GetLength() + 1; } UpdateData(TRUE); m_str = m_str + '-'; UpdateData(FALSE); } void CcalculationDlg::OnBnClickedButton3() //乘法 { savevalue1();//读取第一个操作数 if (c != '0') calculate(); savevalue1();//读取第一个操作数 slength = m_str.GetLength() + 1; UpdateData(TRUE); m_str = m_str + '*'; UpdateData(FALSE); c = '*'; } void CcalculationDlg::OnBnClickedButton4() //除法 { savevalue1();//读取第一个操作数 if (c != '0') calculate(); savevalue1();//读取第一个操作数 slength = m_str.GetLength() + 1; UpdateData(TRUE); m_str = m_str + '/'; UpdateData(FALSE); c = '/'; } void CcalculationDlg::OnBnClickedButton24() //指数 { savevalue1();//读取第一个操作数 if (c != '0') calculate(); savevalue1();//读取第一个操作数 slength = m_str.GetLength() + 1; UpdateData(TRUE); m_str = m_str + '^'; UpdateData(FALSE); c = '^'; } void CcalculationDlg::OnBnClickedButton25() //阶乘 { savevalue1();//读取第一个操作数 if (c != '0') calculate(); savevalue1();//读取第一个操作数 UpdateData(TRUE); m_str = m_str + '!'; UpdateData(FALSE); c = '!'; } void CcalculationDlg::OnBnClickedButton26() //根号 { savevalue1();//读取第一个操作数 if (c != '0') calculate(); savevalue1();//读取第一个操作数 UpdateData(TRUE); UpdateData(FALSE); c = '1';//用1标志根号运算符 calculate(); } void CcalculationDlg::OnBnClickedButton13() //sin { savevalue1();//读取第一个操作数 slength = m_str.GetLength() + 3; UpdateData(TRUE); m_str = CString("sin"); UpdateData(FALSE); c = '2';//用2标志sin运算符 } void CcalculationDlg::OnBnClickedButton17() //tan { savevalue1();//读取第一个操作数 slength = m_str.GetLength() + 3; UpdateData(TRUE); m_str = CString("tan"); UpdateData(FALSE); c = '3';//用3标志tan运算符 } void CcalculationDlg::OnBnClickedButton21() //cos { savevalue1();//读取第一个操作数 slength = m_str.GetLength() + 3; UpdateData(TRUE); m_str = CString("cos"); UpdateData(FALSE); c = '4';//用4标志cos运算符 } void CcalculationDlg::OnBnClickedButton29() //进制转换 { savevalue1();//读取第一个操作数 slength = m_str.GetLength() + 2; UpdateData(TRUE); m_str += "->"; UpdateData(FALSE); c = '5';//用5标志进制运算符 } void CcalculationDlg::OnBnClickedButton27() //log { savevalue1();//读取第一个操作数 slength = m_str.GetLength() + 5; UpdateData(TRUE); m_str = CString("log(") + m_str + ')'; UpdateData(FALSE); c = '7'; } void CcalculationDlg::OnBnClickedButton30() //换为十进制 { UpdateData(TRUE); m_str += "->10"; UpdateData(FALSE); c = '6';//用6标志十进制运算符 } void CcalculationDlg::OnBnClickedButton28() //e^x { savevalue1();//读取第一个操作数 slength = m_str.GetLength() + 2; UpdateData(TRUE); m_str = CString("e^") + m_str; UpdateData(FALSE); c = '8';//用8标志e^x运算符 } void CcalculationDlg::OnBnClickedButton9() //( { savevalue1();//读取第一个操作数 slength = m_str.GetLength() + 1; m_str = m_str + '('; UpdateData(FALSE); } void CcalculationDlg::OnBnClickedButton23() //) { UpdateData(TRUE); if (c == '0')//如果前面没有运算符表示是第一个操作数被括起来了 slength = m_str.GetLength() + 1; m_str = m_str + ')'; UpdateData(FALSE); } void CcalculationDlg::OnBnClickedButton6() //+1 { UpdateData(TRUE); m_str = m_str + '1'; UpdateData(FALSE); } void CcalculationDlg::OnBnClickedButton7() { UpdateData(TRUE); m_str = m_str + '2'; UpdateData(FALSE); } void CcalculationDlg::OnBnClickedButton8() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); m_str = m_str + '3'; UpdateData(FALSE); } void CcalculationDlg::OnBnClickedButton10() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); m_str = m_str + '4'; UpdateData(FALSE); } void CcalculationDlg::OnBnClickedButton11() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); m_str = m_str + '5'; UpdateData(FALSE); } void CcalculationDlg::OnBnClickedButton12() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); m_str = m_str + '6'; UpdateData(FALSE); } void CcalculationDlg::OnBnClickedButton14() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); m_str = m_str + '7'; UpdateData(FALSE); } void CcalculationDlg::OnBnClickedButton15() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); m_str = m_str + '8'; UpdateData(FALSE); } void CcalculationDlg::OnBnClickedButton16() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); m_str = m_str + '9'; UpdateData(FALSE); } void CcalculationDlg::OnBnClickedButton19() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); m_str = m_str + '0'; UpdateData(FALSE); } void CcalculationDlg::OnBnClickedButton18() // . { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); m_str = m_str + '.'; UpdateData(FALSE); } void CcalculationDlg::OnBnClickedButton32() //等于 { UpdateData(TRUE); if (c != '+' && c != '-' && c != '*' && c != '/' && c != '!' && c != '^' && c - '0' > 9) { num1 = _ttof(m_str); } //当单击输入数值而没有单击操作符按钮、直接单击“=”时,界面上保持显示第一个操作数 else calculate(); c = '0';//表示默认无符号输入 UpdateData(FALSE); }