某个晚上帮人做的一个MFC课程设计的作业。大概花了两三个小时。
效果:
就和平常使用的计算器用法差不多。
CalculatorDlg.h文件中:
class CCalculatorDlg : public CDialog { // Construction public: void SaveValue1(); CCalculatorDlg(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CCalculatorDlg) enum { IDD = IDD_CALCULATOR_DIALOG }; CEdit m_edit; //显示使用一个编辑框 CString m_str; //编辑框内的字符串 //输入的2个值 double m_fNumber1; double m_fNumber2; //保存计算符号类型 0=‘+‘,1=‘-‘,2=‘*‘,3=‘/‘ int m_iSign; //计算 void Calculator(); //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CCalculatorDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: HICON m_hIcon; // Generated message map functions //{{AFX_MSG(CCalculatorDlg) virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnMyAbout(); afx_msg void OnButtonBack(); afx_msg void OnButtonClear(); afx_msg void OnButton1(); afx_msg void OnButton2(); afx_msg void OnButton3(); afx_msg void OnButton4(); afx_msg void OnButton5(); afx_msg void OnButton6(); afx_msg void OnButton7(); afx_msg void OnButton8(); afx_msg void OnButton9(); afx_msg void OnButton0(); afx_msg void OnButtonDian(); afx_msg void OnButtonJia(); afx_msg void OnButtonJian(); afx_msg void OnButtonCheng(); afx_msg void OnButtonChu(); afx_msg void OnButtonDeng(); afx_msg void OnButtonPingFang(); afx_msg void OnButtonKaiFang(); //}}AFX_MSG DECLARE_MESSAGE_MAP() };
CalculatorDlg.cpp文件中:
void CCalculatorDlg::OnButtonBack() { // TODO: Add your control notification handler code here UpdateData(TRUE); //移除最右边一个字符 if (!m_str.IsEmpty()) { m_str = m_str.Left(m_str.GetLength()-1); } UpdateData(FALSE); } void CCalculatorDlg::OnButtonClear() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_str = ""; m_fNumber1 = 0.0f; m_fNumber2 = 0.0f; m_iSign = 0; UpdateData(FALSE); } void CCalculatorDlg::OnButton1() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_str = m_str + "1"; UpdateData(FALSE); } void CCalculatorDlg::OnButton2() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_str = m_str + "2"; UpdateData(FALSE); } void CCalculatorDlg::OnButton3() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_str = m_str + "3"; UpdateData(FALSE); } void CCalculatorDlg::OnButton4() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_str = m_str + "4"; UpdateData(FALSE); } void CCalculatorDlg::OnButton5() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_str = m_str + "5"; UpdateData(FALSE); } void CCalculatorDlg::OnButton6() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_str = m_str + "6"; UpdateData(FALSE); } void CCalculatorDlg::OnButton7() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_str = m_str + "7"; UpdateData(FALSE); } void CCalculatorDlg::OnButton8() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_str = m_str + "8"; UpdateData(FALSE); } void CCalculatorDlg::OnButton9() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_str = m_str + "9"; UpdateData(FALSE); } void CCalculatorDlg::OnButton0() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_str = m_str + "0"; UpdateData(FALSE); } //小数点按钮 void CCalculatorDlg::OnButtonDian() { // TODO: Add your control notification handler code here UpdateData(TRUE); //如果没有小数点,则加上一个小数点,如果已有小数点就忽略此次的小数点,保证最多只有1个 if (-1 == m_str.Find(‘.‘)) { m_str = m_str + "."; } UpdateData(FALSE); } void CCalculatorDlg::OnButtonJia() { // TODO: Add your control notification handler code here SaveValue1(); m_iSign = 0; } void CCalculatorDlg::OnButtonJian() { // TODO: Add your control notification handler code here SaveValue1(); m_iSign = 1; } void CCalculatorDlg::OnButtonCheng() { // TODO: Add your control notification handler code here SaveValue1(); m_iSign = 2; } void CCalculatorDlg::OnButtonChu() { // TODO: Add your control notification handler code here SaveValue1(); m_iSign = 3; } void CCalculatorDlg::OnButtonDeng() { // TODO: Add your control notification handler code here Calculator(); } void CCalculatorDlg::SaveValue1() { UpdateData(TRUE); m_fNumber1 = atof(m_str); m_str = ""; UpdateData(FALSE); } void CCalculatorDlg::Calculator() { UpdateData(TRUE); m_fNumber2 = atof(m_str); double f = 0.0f; switch (m_iSign) { //加 case 0: f = m_fNumber1 + m_fNumber2; break; //减 case 1: f = m_fNumber1 - m_fNumber2; break; //乘 case 2: f = m_fNumber1 * m_fNumber2; break; //除 case 3: if (m_fNumber2 == 0.0f) { f = m_fNumber1; } else { f = m_fNumber1 / m_fNumber2; } break; //平方 case 4: f = m_fNumber2 * m_fNumber2; break; //开方 case 5: f = sqrt(m_fNumber2); break; default: break; } //如果浮点数其实是个整数 if(f - int(f) <= 1e-5) { m_str.Format("%d",(int)f); } else { m_str.Format("%f",f); } UpdateData(FALSE); m_fNumber1 = f; m_fNumber2 = 0.0f; } void CCalculatorDlg::OnButtonPingFang() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_fNumber1 = atof(m_str); double f = m_fNumber1 * m_fNumber1; //如果浮点数其实是个整数 if(f - int(f) <= 1e-5) { m_str.Format("%d",(int)f); } else { m_str.Format("%f",f); } UpdateData(FALSE); m_fNumber1 = f; m_fNumber2 = 0.0f; m_iSign = 4; } void CCalculatorDlg::OnButtonKaiFang() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_fNumber1 = atof(m_str); double f = sqrt(m_fNumber1); //如果浮点数其实是个整数 if(f - int(f) <= 1e-5) { m_str.Format("%d",(int)f); } else { m_str.Format("%f",f); } UpdateData(FALSE); m_fNumber1 = f; m_fNumber2 = 0.0f; m_iSign = 5; }
原文:http://blog.csdn.net/dpsying/article/details/19047645