首先,基于对话框创建工程,然后我们在对话框中添加控件:
我们为编辑框关联一个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();
}
}
效果图:
你自己跑跑程序,理解下,很有必要哦!