MFC计算器最简单版本(我的计算器1.1,和同学交流的结果)

第一天,看了好多别人的,发现代码好多,有点晕,这个不会,只是不能简单计算,但是交作业是够了,要想深究,我下一篇博客是这个的改良版。上一篇是另一种方式。
效果还是有的,用到的函数很少,简单化,不需要设置控键相关的
在这里插入图片描述
一.代码区:
在打控键代码前,设置3个变量

double num1=0.0;
double num2=0.0;
double result = 0.0; int opt=0;

0-9的代码:参考下列改动:

void CMFCApplication10Dlg::OnBnClickedButton1()
{
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs);
	SetDlgItemText(IDC_EDIT1,cs+_T("1"));

}

功能键:
+:

void CMFCApplication10Dlg::OnBnClickedButton13()//+
{
	// TODO: 在此添加控件通知处理程序代码
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs);
	num1 = _ttof(cs);//_tstoi(cs);
	opt = 1; //"+";
	SetDlgItemText(IDC_EDIT1, _T(" "));
}

-:

void CMFCApplication10Dlg::OnBnClickedButton14()//-
{
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs);
	num1 = _ttof(cs);//_tstoi(cs);
	opt = 2; //"-";
	SetDlgItemText(IDC_EDIT1, _T(" "));
}
void CMFCApplication10Dlg::OnBnClickedButton15()//  *
{
	// TODO: 在此添加控件通知处理程序代码
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs);
	num1 = _wtof(cs);//_tstoi(cs);
	opt = 3;
	SetDlgItemText(IDC_EDIT1, _T(" "));
}

/:

void CMFCApplication10Dlg::OnBnClickedButton16()//   /
{
	// TODO: 在此添加控件通知处理程序代码
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs);
	num1 = _ttof(cs);//_tstoi(cs);
	opt = 4;
	SetDlgItemText(IDC_EDIT1, _T(" "));
}

后退:

void CMFCApplication10Dlg::OnBnClickedButton10()//后退
{
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs);
	cs.Delete(cs.GetLength() - 1);
	SetDlgItemText(IDC_EDIT1, cs);
}

清零:

void CMFCApplication10Dlg::OnBnClickedButton18()// AC 全清
{
	CString cs;
	num1 = 0.0; num2 = 0.0; result = 0.0;
    SetDlgItemText(IDC_EDIT1, _T(" "));
	UpdateData(false);
}

小数点:

void CMFCApplication10Dlg::OnBnClickedButton12()//小数点
{
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs);
	num1 = _ttof(cs);
	if (cs.Find(_T(".")) == -1) {
		SetDlgItemText(IDC_EDIT1, cs + _T("."));
	}
	opt = 8;
	cs.Format(_T("%d"), num1);
}
void CMFCApplication10Dlg::OnBnClickedButton2pingfang()//平方
{
	// TODO: 在此添加控件通知处理程序代码
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs);
	num1 = _ttof(cs); opt = 5;
	double f = pow(num1,2);
	//如果浮点数其实是个整数,就显示为整数
	if (f - int(f) <= 1e-5)
	{
		cs.Format(L"%d", (int)f);
	}
	else
	{
		cs.Format(L"%f", f);
	}
	//SetDlgItemText(IDC_EDIT1, _T(" "));
	num1 = f;
	num2 = 0.0f;
}

开方:

void CMFCApplication10Dlg::OnBnClickedButtonkaifang()//开方
{
	// TODO: 在此添加控件通知处理程序代码
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs);
	num1 = _ttof(cs); opt = 5;
	double f = sqrt(num1);
	//如果浮点数其实是个整数,就显示为整数
	if (f - int(f) <= 1e-5)
	{
		cs.Format(L"%d", (int)f);
	}
	else
	{
		cs.Format(L"%f", f);
	}
	//SetDlgItemText(IDC_EDIT1, _T(" "));
	num1 = f;
	num2 = 0.0f;
	
}

Π:

void CMFCApplication10Dlg::OnBnClickedButton20()//pai
{
	
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs);
	SetDlgItemText(IDC_EDIT1, cs + _T("3.14159265359"));
}

关于:

void CMFCApplication10Dlg::OnBnClickedButtonabout()//关于
{
	// TODO: 在此添加控件通知处理程序代码
	CAboutDlg dlg;
	dlg.DoModal();
}

^:

void CMFCApplication10Dlg::OnBnClickedButtonncifang()//^
{
	// TODO: 在此添加控件通知处理程序代码

	CString cs;
	GetDlgItemText(IDC_EDIT1, cs);
	num1 = _ttof(cs); opt = 6;
	SetDlgItemText(IDC_EDIT1, _T(" "));
}

%:

void CMFCApplication10Dlg::OnBnClickedButton19()//%
{
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs);
	num1 = _ttof(cs); opt = 7;
	
}

开几次方:

void CMFCApplication10Dlg::OnBnClickedButton22()//开几次方
{
	// TODO: 在此添加控件通知处理程序代码
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs);
	num1 = _ttof(cs); opt = 10;
	SetDlgItemText(IDC_EDIT1, _T(""));
}

log:

void CMFCApplication10Dlg::OnBnClickedButton23()//log
{
	// TODO: 在此添加控件通知处理程序代码
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs); double num;
	num1 = _ttof(cs); opt = 5; num = log10(num1); num1 = num;
	SetDlgItemText(IDC_EDIT1, _T(" "));

}

ln:

void CMFCApplication10Dlg::OnBnClickedButton25()// ln
{
	// TODO: 在此添加控件通知处理程序代码
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs); double num;
	num1 = _ttof(cs); opt = 5; num = log(num1); num1 = num;
	SetDlgItemText(IDC_EDIT1, _T(" "));
}

e^n:

void CMFCApplication10Dlg::OnBnClickedButton24()//e^n
{
	// TODO: 在此添加控件通知处理程序代码
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs); double num;
	num1 = _ttof(cs); opt = 5; num = exp(num1); num1 = num;
	SetDlgItemText(IDC_EDIT1, _T(" "));
}

sin:

void CMFCApplication10Dlg::OnBnClickedButton27()//sin
{
	// TODO: 在此添加控件通知处理程序代码
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs); double num;
	num1 = _ttof(cs); opt = 5; num = (num1*3.1415926)/180; num1 = sin(num);
	SetDlgItemText(IDC_EDIT1, _T(" "));
}

cos:

void CMFCApplication10Dlg::OnBnClickedButton28()//cos 
{
	// TODO: 在此添加控件通知处理程序代码
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs); double num;
	num1 = _ttof(cs); opt = 5; num = (num1*3.1415926) / 180; num1 = cos(num);
	SetDlgItemText(IDC_EDIT1, _T(" "));
}

n!:

void CMFCApplication10Dlg::OnBnClickedButton26()// n!
{
	// TODO: 在此添加控件通知处理程序代码
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs); 
	num1 = _ttof(cs); double  num=1;
	for (int i = 1; i <= num1; i++)
		num *= i; 
	num1 = num;
	opt = 5;
	SetDlgItemText(IDC_EDIT1, _T(" "));
}
void CMFCApplication10Dlg::OnBnClickedButton17()//    =
{
	// TODO: 在此添加控件通知处理程序代码
	CString cs;
	GetDlgItemText(IDC_EDIT1, cs);
	num2 = _ttof(cs);
	
		switch (opt)
		{
		case 1: { result = num1 + num2;  break; }
		case 2:result = num1 - num2;  break;
		case 3:result = num1 * num2; break;
		case 4:if (num2 == 0) {
			result = num1;
			MessageBox(_T("输入无效!"));
		}
			   else {
			result = num1 / num2;  
		}
			 break;
		case 5:result = num1; break;
		case 6: {
			double f = pow(num1, num2);
			//如果浮点数其实是个整数,就显示为整数
			if (f - int(f) <= 1e-5)
			{
				cs.Format(L"%d", (int)f);
			}
			else
			{
				cs.Format(L"%f", f);
			}
			//SetDlgItemText(IDC_EDIT1, _T(" "));
			num1 = f;
			num2 = 0.0f;
			result = num1;
		}     break;
		case 7: result = num1 / 100;   break;
		case 8:
			result = num2; 
		case 9:
			result = num1; 
			break;
		case 10:
			result = pow(num1, 1 / num2); 
		default:break;
		}
		num1 = result; num2 = 0; 
	
	if (result - int(result) <= 1e-5)
	{
		cs.Format(L"%d", (int)result);
	}
	else
	{
		cs.Format(_T(" = %f"), result);
	}

	SetDlgItemText(IDC_EDIT1, cs);

  
	num1 = 0;
	num2 = 0; result =0.0;
	}
	
退出键:
删掉确定键,把取消键名换成退出键名
分析:代码多,功能多,主要函数:
1.  CString cs;
	GetDlgItemText(IDC_EDIT1, cs); 
	num1 = _ttof(cs); double  num=1;
	SetDlgItemText(IDC_EDIT1, _T(" "));
	中的GetDlgItemText()SetDlgItemText()
	原型:
*1*int GetDlgItemText( HWND hDlg , int nID, LPTSTR lpStr, int nMaxCount) const;

*2*int GetDlgItemText( int nID, CString& rString) const;
     分析函数结构:
GetDlgItemText 函数 用于获取对话框中指定控件的标题或文本。  

UINT GetDlgItemText(HWND hDlg, int nIDDlgItem, LPTSTR lpString, int nMaxCount);

hDlg 窗口的句柄。

nIDDlgItem   指定控件的标识符(ID)。 

lpString   指向用于接收获取结果的缓冲区的指针。   

nMaxCount   指定允许拷贝到上述缓冲中的最大字符数(按 TCHAR 字符类型),如果字符串的长度(包含结束空字符)大于指定的最大字符数,则会被截断。

返回值  

如果函数调用成功,返回值为拷贝到缓冲区中的 TCHAR 字符个数(不包括结束空字符)。  

如果函数调用失败,返回值为 0 。要获取更多错误信息,请调用 GetLastError 函数。

说明  如果字符串的长度大于缓冲区的长度,则会被截断,并以空字符结束。GetDlgItemText 函数向控件发送一条 WM_GETTEXT 消息。在 ANSI 版本中,长度指的是字节数,在 Unicode 版本中,长度指的是字符的个数。

系统要求

 动态链接库:user32.dll

头文件:在Winuser.h中定义,需包含Windows.h文件   

库文件:User32.lib  

GetDlgItemInt(int nID,BOOL *lpTrans=NULL,BOOL bSigned=TRUE)
第一个参数nID是控件的ID,
第二个参数,主要是为了接收错误信息

可能出现的错误信息有: ID无效,并且超过指定大小,比如说:ID为12345677,这个就不行.
还有就是输入不能解析为一个int类型的,比如输入:"bvbvbvbv","3.5666",
当然后面可以解析为一个浮点型,在这里取得的值为3,但是还是会有错误信息
如果不指定第二个参数,就不会获得任何错误信息,这个参数很有用的,对输入的判断是否可以解析为int类型或者是否有效,很有用的,我们经常有这个参数来判断用户的输入是否合法

参数3:默认的为true,主要是针对"-123",像这样的字符,它可以把前面的"-"解析为负号,那么就是标准的int类型了,如果设置为false,那么它不可以有
负数,因为在这里的"-",被认为是不合法的

用途如下:

        BOOL flag;

UINT ui=GetDlgItemInt(IDC_EDIT1,&flag,true);

CString cs;

cs.Format("%d,%d",ui,flag);

MessageBox(cs);
(来自https://blog.csdn.net/zacklin/article/details/7454735*3*BOOLSetDlgltemText(HWND hDlg,int nlDDlgltem,LPCTSTR IpString);
参数编辑

hDlg:指定含有控件的对话框。
nlDDlgltem:标识带有将被设置的标题和文本的控件。
IpString:指向一个以NULL结尾的字符串指针,该字符串指针包含了将被复制到控件的文本。
返回值:如果函数调用成功,则返回值为非零值。如果函数调用失败,则返回值为零。若想获得更多的错误信息,请调用GetLastError函数。
使用例子编辑
CTime ctime=CTime::GetCurrentTime(); //得到当前系统时间
CString strTime=time.Format("%H:%M:%S");
::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_TIME,strTime); //送到指定控件
在vc6.0以后的版本中不支持AfxGetMainWnd()->m_hWnd来获取HWND,所以需要把这一句改为:
SetDlgItemText(AfxGetApp()->m_pMainWnd->m_hWnd,IDC_TIME, strTime);
在VS中需要去掉第一个参数,直接SetDlgItemText(IDC_TIME, strTime);
备注:SetDlgltem函数把一个WM_SETTEXT消息发送到指定的控件。
(来自百度百科https://baike.baidu.com/item/SetDlgItemText/1856099?fr=aladdin)

	2.cs.Format(L"%d", (int)f);    num2 = _ttof(cs);类型转换,可以看我前2篇,有详解
	3.num = exp(num1); 为e^n计算函数
	

后改进的版本:

MFC简单计算器(我的实验报告1.2版本)
简单MFC计算器(字符串形式,基于vs2017 我的实验报告版本1.3)

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

广大菜鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值