当前位置:C++技术网 > 资讯 > MFC实现计算器的设计

MFC实现计算器的设计

更新时间:2015-10-19 20:39:11浏览次数:1+次

计算器的实现,有很多的方法,之前我也查过计算器的程序代码,大多数是C写的。还是不错的,今天我们用MFC的控件来写个计算器。

首先,基于对话框创建工程,然后我们在对话框中添加控件:

我们为编辑框关联一个double类型的变量m_Result,编译器会自动给我们初始化为0。接着我们十六个按钮添加消息响应,按钮“C”为第十一个,按钮”+“为第十三个。同时我们添加个Count函数,用来计算。我们在对话框类的头文件中声明三个变量m_Num,m_Operator,m_bCalc:

class CCalculatorDlg : public CDialog
{
// Construction
public:
 void Count();
 CCalculatorDlg(CWnd* pParent = NULL);	// standard constructor
 double m_Num;	 //记录编辑框中的数据
 char m_Operator; //保存运算符
 BOOL  m_bCalc;	//是否需要计算

// Dialog Data
 //{{AFX_DATA(CCalculatorDlg)
........
}

接着就是初始化:

CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/)
 : CDialog(CCalculatorDlg::IDD, pParent)
{
 //{{AFX_DATA_INIT(CCalculatorDlg)
 m_Result = 0.0;
 //}}AFX_DATA_INIT
 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
 m_Operator = ' ';
 m_bCalc = FALSE;
 m_Num = 0;
}

由于数字0~9的按钮消息一样,我就只列出一个函数:

void CCalculatorDlg::OnButton6()
{
 // TODO: Add your control notification handler code here
 UpdateData(TRUE);
 if (m_Operator == ' ')
 {
  m_Result = m_Result * 10 + 6;
  m_Num = m_Result;
 }
 else
 {
  if (m_bCalc == FALSE)
  {
   m_Result = 0;
  }
  m_bCalc = TRUE;
  m_Result = m_Result * 10 + 6;
 }
 UpdateData(FALSE);
}

四个运算符我也只列出一个,其他的都一样:

void CCalculatorDlg::OnButton13()
{
 // TODO: Add your control notification handler code here
 if (m_Operator != ' ' && m_bCalc == TRUE)
 {
  Count();
 }
 m_Operator = '+';
 m_bCalc = FALSE;
}

下面就是按钮"="和按钮“C”了。我们依次来:

void CCalculatorDlg::OnButton12()
{
 if (m_bCalc == TRUE)
 {
  Count();
 }
}
void CCalculatorDlg::OnButton11()
{
 // TODO: Add your control notification handler code here
 UpdateData(TRUE);
 m_Result = 0;
 m_Num = 0;
 m_Operator = ' ';
 m_bCalc = FALSE;
 UpdateData(FALSE);
}

还有一个就是我们的Count函数:

void CCalculatorDlg::Count()
{
 UpdateData(TRUE);
 switch(m_Operator)
 {
 case '+':
  m_Num += m_Result;
  break;
 case '-':
  m_Num -= m_Result;
  break;
 case '*':
  m_Num *= m_Result;
  break;
 case '/':
  if(m_Result == 0)
  {
   MessageBox("除数不能为0");
   return;
  }
  m_Num /= m_Result;
  break;
 default:
  m_Num = m_Result;
  break;
 }
 m_Result = m_Num;
 m_Operator = ' ';
 m_bCalc = FALSE;
 UpdateData(FALSE);
}

void CCalculatorDlg::OnButton12()
{
 if (m_bCalc == TRUE)
 {
  Count();
 }
}


效果图:


你自己跑跑程序,理解下,很有必要哦!