制作好之后是这样的,可以实现加减乘除,连加连减,连乘连除,除数为0会提示,正负号的运算也可以,可以清除所有数据,也可以在输入数据时退格,下方是版权信息
一、界面设计
如下图所示,19个Button按钮,3个静态文本框
给每个控件做对齐排布,右上角有对齐的工具,并且改上对应的Caption,上方的静态文本框的ID改为IDC_STATICSHOW;下方的文本框ID改为IDC_STATICRESULT,属性里面是不可以直接改字体样式(大小和字体),只能在OnInitDialog写入初始化代码修改,每个button也可以根据自己的命名规则来改(比如我不会的单词,除法,乘法啥的用拼音代替,IDC_CHUFA)
二、设置成员变量
在CALDlg.h(自己的项目名Dlg.h头文件中),添加公有变量和私有变量
公有变量:
public://自己添加的共有的成员变量
CString m_strResult;//运算结果的成员变量
CString m_strShow;//展示
CString m_strTemp;//临时存储的字符串
char m_symbol;//符号
double m_num;//数字
double m_result;//结果
afx_msg void OnBnClickedOk();//以确定方式退出
私有变量:
private:
//添加两个可以控制字体的类变量
CFont m_font;
CStatic m_static;
三、初始化成员变量
在CALDlg.cpp中的
初始化代码:
//初始化成员变量
m_num = 0;
m_result = 0;
m_symbol = 0;
四、初始化对话框
在CALDlg.cpp中找到OnInitDialog,在return TRUE之前添加如下代码
// TODO: 在此添加额外的初始化代码
//给计算结果的静态文本框初始化显示为0
SetDlgItemText(IDC_STATICRESULT, L"0");
//调整IDC_STATICRESULT的字体
m_static.SubclassDlgItem(IDC_STATICRESULT, this);
//m_static.SubclassDlgItem(IDC_STATICSHOW, this);
m_font.CreatePointFont(200, _T("黑体"));
m_static.SetFont(&m_font);
初始化字体和初始化文本框的显示结果的:
IDC_STATIC是第二个关于计算的文本框的ID
五、添加控件代码
双击各个控件即可进入对应的事件函数
1.各个数字的代码(0~9)
void CCALDlg::OnBnClickedNum1()//数字1的事件函数
{
// TODO: 在此添加控件通知处理程序代码
m_strResult += L"1";//1是宽字符
SetDlgItemText(IDC_STATICRESULT, m_strResult);//IDC_STATICRESULT是显示运算结果的的静态文本框的ID
//此处ID报红是正常现象
}
void CCALDlg::OnBnClickedNum2()//数字2的事件函数
{
// TODO: 在此添加控件通知处理程序代码
m_strResult += L"2";//2是宽字符
SetDlgItemText(IDC_STATICRESULT, m_strResult);//IDC_STATICRESULT是显示运算结果的的静态文本框的ID
}
void CCALDlg::OnBnClickedNum3()//数字3
{
// TODO: 在此添加控件通知处理程序代码
m_strResult += L"3";//3是宽字符
SetDlgItemText(IDC_STATICRESULT, m_strResult);//IDC_STATICRESULT是显示运算结果的的静态文本框的ID
}
void CCALDlg::OnBnClickedNum4()//数字4
{
// TODO: 在此添加控件通知处理程序代码
m_strResult += L"4";//4是宽字符
SetDlgItemText(IDC_STATICRESULT, m_strResult);//IDC_STATICRESULT是显示运算结果的的静态文本框的ID
}
void CCALDlg::OnBnClickedNum5()//数字5
{
// TODO: 在此添加控件通知处理程序代码
m_strResult += L"5";//5是宽字符
SetDlgItemText(IDC_STATICRESULT, m_strResult);//IDC_STATICRESULT是显示运算结果的的静态文本框的ID
}
void CCALDlg::OnBnClickedNum6()
{
// TODO: 在此添加控件通知处理程序代码
m_strResult += L"6";//6是宽字符
SetDlgItemText(IDC_STATICRESULT, m_strResult);//IDC_STATICRESULT是显示运算结果的的静态文本框的ID
}
void CCALDlg::OnBnClickedNum7()
{
// TODO: 在此添加控件通知处理程序代码
m_strResult += L"7";//8是宽字符
SetDlgItemText(IDC_STATICRESULT, m_strResult);//IDC_STATICRESULT是显示运算结果的的静态文本框的ID
}
void CCALDlg::OnBnClickedNum8()
{
m_strResult += L"8";//8是宽字符
SetDlgItemText(IDC_STATICRESULT, m_strResult);//IDC_STATICRESULT是显示运算结果的的静态文本框的ID
}
void CCALDlg::OnBnClickedNum9()
{
// TODO: 在此添加控件通知处理程序代码
m_strResult += L"9";//9是宽字符
SetDlgItemText(IDC_STATICRESULT, m_strResult);//IDC_STATICRESULT是显示运算结果的的静态文本框的ID
}
void CCALDlg::OnBnClickedButton17()//数字0忘记改ID为IDC_NUM0了
{
// TODO: 在此添加控件通知处理程序代码
m_strResult += L"0";//0是宽字符
SetDlgItemText(IDC_STATICRESULT, m_strResult);//IDC_STATICRESULT是显示运算结果的的静态文本框的ID
}
2.清除功能的代码
void CCALDlg::OnBnClickedClear()//清除的事件函数
{
SetDlgItemText(IDC_STATICRESULT, L"0");//运算结果的文本框显示未0
SetDlgItemText(IDC_STATICSHOW, L"0");//显示输入过程的show文本框也一起清空
// TODO: 在此添加控件通知处理程序代码
m_strResult.Empty();//直接清空
//之前定义好的公有成员变量都清空
m_strShow.Empty();//显示的字符串也清空
m_strTemp.Empty();//中间变量也清空
m_num = 0;//数字变成0
m_result = 0;//double计算机内运算的结果也等于0
m_symbol = 0;
}
3.退格功能的代码
void CCALDlg::OnBnClickedBackone()//back_one退格的事件函数
{
// TODO: 在此添加控件通知处理程序代码
//减字符串
if (m_strResult.IsEmpty())//如果字符串是空
{
SetDlgItemText(IDC_STATICRESULT, L"0");
}
else if (m_strResult.GetLength() == 1)//如果长度是1
{
m_strResult = m_strResult.Left(m_strResult.GetLength() - 1);
SetDlgItemText(IDC_STATICRESULT, L"0");
}
else
{
m_strResult = m_strResult.Left(m_strResult.GetLength() - 1);
SetDlgItemText(IDC_STATICRESULT, m_strResult);
}
}
4.加减乘除功能的代码
void CCALDlg::OnBnClickedJiafa()//加
{
//转出原来的结果
if (m_strResult.IsEmpty())
{
m_num = _wtof(m_strTemp);
}
else
{
m_num = _wtof(m_strResult);
}
if (m_symbol == 0)//用符号做判断
{
m_result = m_num;
}
else
{
switch (m_symbol)
{
case'+':
m_result = m_result + m_num;
break;
case'-':
m_result = m_result - m_num;
break;
case'*':
m_result = m_result * m_num;
break;
case'/':
{
if (m_num == 0)
{
//设置文本提示除数不能为零
SetDlgItemText(IDC_STATICRESULT, L"除数不能为0");
m_strResult.Empty();
m_strShow.Empty();
m_strTemp.Empty();
m_num = 0;
m_result = 0;
m_symbol = 0;
return;
}
m_result = m_result / m_num;
break;
}
}
}
//上面的文本框SHOW显示连续操作文本
if (m_strResult.IsEmpty())
{
m_strShow += m_strTemp + L"+";//临时文本变量m_strTemp
}
else
{
m_strShow += m_strResult + L"+";
}
SetDlgItemText(IDC_STATICSHOW, m_strShow);
//下面的文本框RESULT显示结果,把计算结果转换成文本
//下面的文本框RESULT显示结果,把计算结果转换成文本
CString str;
str.Format(L"%f", m_result);
SetDlgItemText(IDC_STATICRESULT, str);
//用字符来记录符号
m_symbol = '+';
//清空原来的result
m_strResult.Empty();
}
void CCALDlg::OnBnClickedJianfa()//减
{
//转出原来的结果
if (m_strResult.IsEmpty())
{
m_num = _wtof(m_strTemp);
}
else
{
m_num = _wtof(m_strResult);
}
if (m_symbol == 0)//用符号做判断
{
m_result = m_num;
}
else
{
switch (m_symbol)
{
case'+':
m_result = m_result + m_num;
break;
case'-':
m_result = m_result - m_num;
break;
case'*':
m_result = m_result * m_num;
break;
case'/':
{
if (m_num == 0)
{
//设置文本提示除数不能为零
SetDlgItemText(IDC_STATICRESULT, L"除数不能为0");
m_strResult.Empty();
m_strShow.Empty();
m_strTemp.Empty();
m_num = 0;
m_result = 0;
m_symbol = 0;
return;
}
m_result = m_result / m_num;
break;
}
}
}
//上面的文本框SHOW显示连续操作文本
if (m_strResult.IsEmpty())
{
m_strShow += m_strTemp + L"-";//临时文本变量m_strTemp
}
else
{
m_strShow += m_strResult + L"-";
}
SetDlgItemText(IDC_STATICSHOW, m_strShow);
//下面的文本框RESULT显示结果,把计算结果转换成文本
CString str;
str.Format(L"%f", m_result);
SetDlgItemText(IDC_STATICRESULT, str);
//用字符来记录符号
m_symbol = '-';//变这里'-'
//清空原来的result
m_strResult.Empty();
}
void CCALDlg::OnBnClickedChengfa()//乘
{
// TODO: 在此添加控件通知处理程序代码
//转出原来的结果
if (m_strResult.IsEmpty())
{
m_num = _wtof(m_strTemp);
}
else
{
m_num = _wtof(m_strResult);
}
if (m_symbol == 0)//用符号做判断
{
m_result = m_num;
}
else
{
switch (m_symbol)
{
case'+':
m_result = m_result + m_num;
break;
case'-':
m_result = m_result - m_num;
break;
case'*':
m_result = m_result * m_num;
break;
case'/':
{
if (m_num == 0)
{
//设置文本提示除数不能为零
SetDlgItemText(IDC_STATICRESULT, L"除数不能为0");
m_strResult.Empty();
m_strShow.Empty();
m_strTemp.Empty();
m_num = 0;
m_result = 0;
m_symbol = 0;
return;
}
m_result = m_result / m_num;
break;
}
}
}
//上面的文本框SHOW显示连续操作文本
if (m_strResult.IsEmpty())
{
m_strShow += m_strTemp + L"*";//临时文本变量m_strTemp
}
else
{
m_strShow += m_strResult + L"*";
}
SetDlgItemText(IDC_STATICSHOW, m_strShow);
//下面的文本框RESULT显示结果,把计算结果转换成文本
CString str;
str.Format(L"%f", m_result);
SetDlgItemText(IDC_STATICRESULT, str);
//用字符来记录符号
m_symbol = '*';//变这里'-'
//清空原来的result
m_strResult.Empty();
}
void CCALDlg::OnBnClickedChufa()//除
{
//转出原来的结果
if (m_strResult.IsEmpty())
{
m_num = _wtof(m_strTemp);
}
else
{
m_num = _wtof(m_strResult);
}
if (m_symbol == 0)//用符号做判断
{
m_result = m_num;
}
else
{
switch (m_symbol)
{
case'+':
m_result = m_result + m_num;
break;
case'-':
m_result = m_result - m_num;
break;
case'*':
m_result = m_result * m_num;
break;
case'/':
{
if (m_num == 0)
{
//设置文本提示除数不能为零
SetDlgItemText(IDC_STATICRESULT, L"除数不能为0");
m_strResult.Empty();
m_strShow.Empty();
m_strTemp.Empty();
m_num = 0;
m_result = 0;
m_symbol = 0;
return;
}
m_result = m_result / m_num;
break;
}
}
}
//上面的文本框SHOW显示连续操作文本
if (m_strResult.IsEmpty())
{
m_strShow += m_strTemp + L"/";//临时文本变量m_strTemp
}
else
{
m_strShow += m_strResult + L"/";
}
SetDlgItemText(IDC_STATICSHOW, m_strShow);
//下面的文本框RESULT显示结果,把计算结果转换成文本
CString str;
str.Format(L"%f", m_result);
SetDlgItemText(IDC_STATICRESULT, str);
//用字符来记录符号
m_symbol = '/';//变这里'-'
//清空原来的result
m_strResult.Empty();
}
5.小数点功能的代码
void CCALDlg::OnBnClickedButton18()//小数点
{
if (m_strResult.Find(L".") != -1)//有小数点
{
return;
}
else
{
m_strResult += L".";
SetDlgItemText(IDC_STATICRESULT, m_strResult);
}
}
6.正负号功能的代码
void CCALDlg::OnBnClickedZhengfu()//正负号
{
if (m_strTemp.IsEmpty())
{
m_num = _wtof(m_strResult);
}
else
{
m_num= _wtof(m_strTemp);
}
m_num = -m_num;//取反
m_strResult.Format(L"%lf", m_num);
SetDlgItemText(IDC_STATICRESULT, m_strResult);
m_symbol = 0;//清楚符号
}
7.等于功能的代码
void CCALDlg::OnBnClickedDengyu()//等于
{
// TODO: 在此添加控件通知处理程序代码
m_num = _wtof(m_strResult);
switch (m_symbol)
{
case'+':
m_result = m_result + m_num;
break;
case'-':
m_result = m_result - m_num;
break;
case'*':
m_result = m_result * m_num;
break;
case'/':
{
if (m_num == 0)
{
//设置文本提示除数不能为零
SetDlgItemText(IDC_STATICRESULT, L"除数不能为0");
m_strResult.Empty();
m_strShow.Empty();
m_strTemp.Empty();
m_num = 0;
m_result = 0;
m_symbol = 0;
return;
}
m_result = m_result / m_num;
break;
}
case 0:
SetDlgItemText(IDC_STATICRESULT, m_strResult);
break;
}
//显示结果
//下面的文本框RESULT显示结果,把计算结果转换成文本
CString str;
str.Format(L"%f", m_result);
SetDlgItemText(IDC_STATICRESULT, str);
m_strTemp = m_strResult = str;//中间变量 备份 及时更新结果
m_strResult.Empty();//清空原有内容
m_symbol = 0;//清空符号
}
六、源码领取方式
可以去我上传的资源里找(这个下载需要积分),没有积分的小伙伴可以点赞收藏后发送MFC计算器 私信领取百度网盘链接
版权归原作者 L洛L 所有, 如有侵权,请联系我们删除。