活动详情地址:话题挑战赛第2期
程序猿你们好!!!这次是给大家做一个简单的计算器,话不多说直接上活。。。。
一、环境搭建
在做之前我们先要搭建环境,是基于MFC的对话框应用程序,需要一个Edit control以及好几个Button,大家在拖拉的时候可能会因为他的对其、大小产生一些烦恼,现在给你们一个简单的方法。
1.1对话框
单机对话框会出现属性,单击属性,选择右对齐;或者直接单机对话框也可以出来,至于ID就不改了(ID是每一个部件的唯一属性,有且仅有一个,我们在代码里也是操作他的ID,ID要见名知意,尽量全是大写)。
上图是每一个部件都有的,至于他们各代表什么意思,还需大家花时间取了解,里面的属性都很有用。
这些按钮就是为了大家使其排版整齐,大家将鼠标放在按钮上就可以知道它的意思,要好好利用
二、技术讲解
运算就不讲了吧,大家既然能够看到这篇文章相信运算没啥问题,现在来讲写按钮
问题:1)edit框里面显示的是什么类型的?
2)我们输入的是什么类型的?
3)如何类型转化?
2.1 小数点
大家都知道,我们的数学中,小数点的数量是<= 1的,根据这个就可以知道,那么如果多按了几次小数点如何处理那?首先当点击小数点时,要进行判断判断edit里面有没有小数点,如果有我们就不显示他,如果没有那就加一个小数点;代码如下:
CString str;
GetDlgItemText(IDC_EDIT1, str);
if (str.Find(_T(".")) == -1)
{
SetDlgItemText(IDC_EDIT1, str + _T("."));
}
2.2 显示数字
如何将我们点击的数字按钮显示在edit框里面?那就是直接操作对话框,让它显示输入的数字,至于输入多个就很简单。先将里面的内容获取,再加上以前有的就行了,
代码如下:
//按钮,数字1
void CAboutDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
SetDlgItemText(IDC_EDIT1, str + _T("1"));
}
void CAboutDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
SetDlgItemText(IDC_EDIT1, str + _T("2"));
}
void CAboutDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
SetDlgItemText(IDC_EDIT1, str + _T("3"));
}
2.3 清零
清零就是将显示器所有的内容全部全部清为零。简单吧!!!
//清零
void CAboutDlg::OnBnClickedButtonClear()
{
// TODO: 在此添加控件通知处理程序代码
double number1 = 0;
double number2 = 0;
opt = " ";
SetDlgItemText(IDC_EDIT1,_T(" "));
}
2.4 后退
这个按钮的功能在于将当前输入的数字撤回,显示以前的,可以通过测量数字的长度,然后减1获得;
CString str;
GetDlgItemText(IDC_EDIT1, str);
str.Delete(str.GetLength() - 1);
SetDlgItemText(IDC_EDIT1, str);
三、完整代码
1)注意按钮的ID
2)希望大家思考一下为什么要定义CString 类型的?
// CMycounterApp 消息处理程序
//我们输入的第一个数
double number1;
//输入的第二个数
double number2;
//用来接收第三个数
int result;
//定义个字符串类型的变量来接受我们的运算符
CString opt;
//按钮,数字1
void CAboutDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
SetDlgItemText(IDC_EDIT1, str + _T("1"));
}
void CAboutDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
SetDlgItemText(IDC_EDIT1, str + _T("2"));
}
void CAboutDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
SetDlgItemText(IDC_EDIT1, str + _T("3"));
}
void CAboutDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
SetDlgItemText(IDC_EDIT1, str + _T("4"));
}
void CAboutDlg::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
SetDlgItemText(IDC_EDIT1, str + _T("5"));
}
void CAboutDlg::OnBnClickedButton6()
{
// TODO: 在此添加控件通知处理程序代码
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
SetDlgItemText(IDC_EDIT1, str + _T("6"));
}
void CAboutDlg::OnBnClickedButton7()
{
// TODO: 在此添加控件通知处理程序代码
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
SetDlgItemText(IDC_EDIT1, str + _T("7"));
}
void CAboutDlg::OnBnClickedButton8()
{
// TODO: 在此添加控件通知处理程序代码
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
SetDlgItemText(IDC_EDIT1, str + _T("8"));
}
void CAboutDlg::OnBnClickedButton9()
{
// TODO: 在此添加控件通知处理程序代码
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
SetDlgItemText(IDC_EDIT1, str + _T("9"));
}
//退位
void CAboutDlg::OnBnClickedButtonBack()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
str.Delete(str.GetLength() - 1);
SetDlgItemText(IDC_EDIT1, str);
}
//清零
void CAboutDlg::OnBnClickedButtonClear()
{
// TODO: 在此添加控件通知处理程序代码
double number1 = 0;
double number2 = 0;
opt = " ";
SetDlgItemText(IDC_EDIT1,_T(" "));
}
//也是清零
void CAboutDlg::OnBnClickedButtonClr()
{
// TODO: 在此添加控件通知处理程序代码
double number1 = 0;
double number2 = 0;
opt = " ";
SetDlgItemText(IDC_EDIT1, _T(" "));
}
void CAboutDlg::OnBnClickedButtonOpp()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
number1 = _tstof(str);
opt = "+/-";
SetDlgItemText(IDC_EDIT1, _T(" "));
}
void CAboutDlg::OnBnClickedButtonDev()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
number1 = _tstof(str);
opt = "/";
SetDlgItemText(IDC_EDIT1, _T(" "));
}
void CAboutDlg::OnBnClickedButtonMul()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
number1 = _tstof(str);
opt = "*";
SetDlgItemText(IDC_EDIT1, _T(" "));
}
void CAboutDlg::OnBnClickedButtonSub()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
number1 = _tstof(str);
opt = "-";
SetDlgItemText(IDC_EDIT1, _T(" "));
}
void CAboutDlg::OnBnClickedButtonAdd()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
number1 = _tstof(str);
opt = "+";
SetDlgItemText(IDC_EDIT1, _T(" "));
}
void CAboutDlg::OnBnClickedButtonSqrt()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
number1 = _tstof(str);
opt = "GEN";
SetDlgItemText(IDC_EDIT1, _T(" "));
}
void CAboutDlg::OnBnClickedButtonPer()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
number1 = _tstof(str);
opt = "%";
SetDlgItemText(IDC_EDIT1, _T(" "));
}
void CAboutDlg::OnBnClickedButtonFen()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
number1 = _tstof(str);
opt = "1/X";
SetDlgItemText(IDC_EDIT1, _T(" "));
}
void CAboutDlg::OnBnClickedButtoneEql()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
number2 = _tstof(str);
if (!opt.Compare(_T("+")))
{
result = number1 + number2;
}
else if (!opt.Compare(_T("-")))
{
result = number1 - number2;
}
else if (!opt.Compare(_T("*")))
{
result = number1 * number2;
}
else if (!opt.Compare(_T("/")))
{
if (number2 == 0.00)
{
result = MessageBox(_T("除数不能为零"), NULL, MB_ICONWARNING);
}
result = number1 / number2;
}
else if (!opt.Compare(_T("%")))
{
result = number1 * 0.01;
}
else if (!opt.Compare(_T("GEN")))
{
result = sqrt(number1);
}
else if (!opt.Compare(_T("1/X")))
{
result = 1 / number1;
}
else if (!opt.Compare(_T("+/-")))
{
if (number1 > 0)
{
result = -number1;
}
else
result = -number1;
}
str.Format(_T("%lf"), result);
SetDlgItemText(IDC_EDIT1, str);
}
void CAboutDlg::OnBnClickedButtonZer0()
{
// TODO: 在此添加控件通知处理程序代码
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
SetDlgItemText(IDC_EDIT1, str + _T("0"));
}
void CAboutDlg::OnBnClickedButtonDot()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT1, str);
if (str.Find(_T(".")) == -1)
{
SetDlgItemText(IDC_EDIT1, str + _T("."));
}
}