zoukankan      html  css  js  c++  java
  • 2012-11-17 12:28 用MFC实现的计算器(详细版)

    这篇文章里通过计算器的简单实现,让大家能够了解一般对话框应用程序开发的基本流程

    要求:编写简单的计算器应用程序,要求利用按钮进行加、减、乘,除操作,在对话框输出计算机结果。

              下面结合操作步骤,讲解对话框应用程序开发的基本流程:

             (1)、在对话框资源上添加按钮和编辑框控件,并设置按钮控件和编辑框控件的标题和ID,并且   

                         将编辑框设置为只读属性。最终的运行结果如下图。

          

             (2)、添加单机数字按钮和加、减、乘、除按钮,及单机“等号”按钮的消息响应函数

             (3)、添加消息响应函数的函数体。

             (4)、程序调试无错误后,进行测试,分析测试结果。保证程序的正确性。

            下面分析本程序的代码:

             1、新建一个对话框应用程序Test,采用默认设置;

             2、在类CTestDlg中添加数据成员:

                   CString num1;       //数值计算符号前面的数值
                   CString num2;       //数值计算后面的数值
                   BOOL isresult;        //是否按下加、减、乘、除符号
                   int witch;                //是加、减、乘、除哪种计算

             3、在CTestDlg::OnInitDialog()函数中对相关变量进行初始化

                  num1="";        //第一个数据 
                  num2="";        //第二个数据
                  isresult=FALSE;     //保存是否点击了运算按钮
                  witch=0;              //保存运算按钮

            4、然后是按钮的响应的函数,下面对同一类的按钮响应函数只列出了一个,其他的都是一样的

              void CGeliangDlg::OnN1()                   //单击“1”按钮
             {
                 // TODO: Add your control notification handler code here
                 if(isresult==FALSE)
                {

                     num1+="1";
                     m_result=num1;
                     UpdateData(false);
                }
                if(isresult==TRUE)

                 {

                    num2+="1";
                    m_result=num2;
                   UpdateData(false);
                }
             }

            void CGeliangDlg::OnN10()          //单击“+-按钮”
            {
                 // TODO: Add your control notification handler code here
                 CString m_m="-";
                 if(isresult==FALSE)
                {

                 m_m+=num1;
                 m_result=m_m;
                 UpdateData(false);
                }
               if(isresult==TRUE)
                {

                 m_m+=num2;
                m_result=m_m;
                UpdateData(false);
                } 
           }

           void CGeliangDlg::OnN11()                   //单击“.”按钮
            {
                  // TODO: Add your control notification handler code here
                  if(isresult==FALSE)
                  {

                    num1+=".";
                    m_result=num1;
                    UpdateData(false);
                   }
                   if(isresult==TRUE)
                   {

                    num2+=".";
                    m_result=num2;
                    UpdateData(false);
                   }
                }


            void CGeliangDlg::OnJia()                  //单击“+”按钮
               {
                 // TODO: Add your control notification handler code here
                 isresult=TRUE;
                witch=1;
               }

          void CGeliangDlg::OnResult()            //单击“=”按钮
          {
               // TODO: Add your control notification handler code here
               double number1=atof(num1);
               double number2=atof(num2);
               double result=0.0;
               switch(witch)
               {
                   case 1:result=number1+number2;break;
                  case 2:result=number1-number2;break;
                  case 3:result=number1*number2;break;
                  case 4:result=number1/number2;break;
                  default:AfxMessageBox("程序运行错误");break;
               }
          m_result="";
         m_result.Format("%f",result);
         UpdateData(false);

    }

    上面的程序代码中,仅给出数字按钮,符号按钮和“+/-”按钮,及“.”按钮,的响应函数。数字键按钮的代码是基本类似的

    ,符号按钮的代码也是类似的,读者可以自己写出其他按钮的消息映射,然后编写函数代码。

  • 相关阅读:
    面试题 04.03. 特定深度节点链表
    WordStack
    libevent源码解析2
    libevent源码解析1
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    最短路径(dijkstra 与 Floyd)
    LR怎么并行的
  • 原文地址:https://www.cnblogs.com/jinjiangongzuoshi/p/3300723.html
Copyright © 2011-2022 走看看