基于MFC的计算器实现

活动详情地址:话题挑战赛第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("."));
	}
}

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小气鬼944

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值