最近开始学习MFC(vs2010),看了一段时间教程始终没有感觉,所以就想做一个实际的东西熟练一下。
觉得初学MFC写个计算器吧,模拟一下微软的calc,其实很早就有这种想法啦,哈哈!言归正传吧!!
这是最终的界面,也是一开始设计的界面;
1.放置的控件有
Group Box----------1个
EDIT----------------1个
BUTTON-----------17个
2.属性的修改
Group Box Caption="计算器";
EDIT IDC_EDIT_DISPLAY;
BUTTON 修改后如上图所示;
3.这个小程序的操作说明
参考windows的计算器
4.实现步骤
(一)新建“MFC_CALC”对话框工程,控件已放置如上所示
(二)为MFC_CALCDlg类添加5个private变量:
double m_num1, double m_num2, double m_result, CString m_str, char m_state;
存储第一个操作数 存储第二个操作数 存储结果 记录,处理中间数据 记录操作的类型(+,-,x,/)
(三)为按钮增加处理函数
(1)为数字键(0----9)小数点键,增加处理函数(双击对应按钮控件即可)
添加如下代码
void CMFC_CALCDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
m_str+='1';
SetDlgItemText(IDC_EDIT_DISPLAY,m_str);
}//数字键---'1'的处理代码;
void CMFC_CALCDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
m_str+='2';
SetDlgItemText(IDC_EDIT_DISPLAY,m_str);
}//数字键---“2”的处理代码;
//其他键盘(3-9,0)都按上述处理即可;
void CMFC_CALCDlg::OnBnClickedButtondot()
{
// TODO: 在此添加控件通知处理程序代码
m_str=m_str+'.';
SetDlgItemText(IDC_EDIT_DISPLAY,m_str);
}//小数点键的处理代码;
(2) 加减乘除键的处理代码
void CMFC_CALCDlg::OnBnClickedButtonAdd()
{
// TODO: 在此添加控件通知处理程序代码
m_num1=_tcstod(m_str,0);
m_str.Empty();
SetDlgItemText(IDC_EDIT_DISPLAY,m_str);
m_state='+';
}
void CMFC_CALCDlg::OnBnClickedButtonSub()
{
// TODO: 在此添加控件通知处理程序代码
m_num1=_tcstod(m_str,0);
m_str.Empty();
SetDlgItemText(IDC_EDIT_DISPLAY,m_str);
m_state='-';
}
void CMFC_CALCDlg::OnBnClickedButtonMul()
{
// TODO: 在此添加控件通知处理程序代码
m_num1=_tcstod(m_str,0);
m_str.Empty();
SetDlgItemText(IDC_EDIT_DISPLAY,m_str);
m_state='x';
}
void CMFC_CALCDlg::OnBnClickedButtonDiv()
{
// TODO: 在此添加控件通知处理程序代码
m_num1=_tcstod(m_str,0);
m_str.Empty();
SetDlgItemText(IDC_EDIT_DISPLAY,m_str);
m_state='/';
}
(3)为“=”和"CE"键添加处理代码
void CMFC_CALCDlg::OnBnClickedButton25Ans()
{
// TODO: 在此添加控件通知处理程序代码
m_num2=_tcstod(m_str,0);
switch(m_state)
{
case '+':
m_result=m_num1+m_num2;break;
case '-':
m_result=m_num1-m_num2;break;
case 'x':
m_result=m_num1*m_num2;break;
case '/':
m_result=m_num1/m_num2;break;
}
CString cs;
cs.Format(_T("%lf"),m_result);
SetDlgItemText(IDC_EDIT_DISPLAY,cs);
m_str.Empty();
}
void CMFC_CALCDlg::OnBnClickedButtonCe()
{
// TODO: 在此添加控件通知处理程序代码
m_str.Empty();
m_num1=0;
m_num2=0;
m_result=0;
m_state='0';
SetDlgItemText(IDC_EDIT_DISPLAY,m_str);
}
(四)完成啦!实验一下~~
难点说明,把CString转换为double型的变量要用到函数_tcstod函数;