MFC基于对话框——仿照Windows计算器制作C++简易计算器

这篇具有很好参考价值的文章主要介绍了MFC基于对话框——仿照Windows计算器制作C++简易计算器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、界面设计

二、设置成员变量

三、初始化成员变量 

四、初始化对话框

​五、添加控件代码

1.各个数字的代码(0~9)

2.清除功能的代码

3.退格功能的代码

4.加减乘除功能的代码

5.小数点功能的代码

6.正负号功能的代码

7.等于功能的代码

六、源码领取方式


制作好之后是这样的,可以实现加减乘除,连加连减,连乘连除,除数为0会提示,正负号的运算也可以,可以清除所有数据,也可以在输入数据时退格,下方是版权信息

MFC基于对话框——仿照Windows计算器制作C++简易计算器

 

一、界面设计

如下图所示,19个Button按钮,3个静态文本框

MFC基于对话框——仿照Windows计算器制作C++简易计算器

给每个控件做对齐排布,右上角有对齐的工具,并且改上对应的Caption,上方的静态文本框的ID改为IDC_STATICSHOW;下方的文本框ID改为IDC_STATICRESULT,属性里面是不可以直接改字体样式(大小和字体),只能在OnInitDialog写入初始化代码修改,每个button也可以根据自己的命名规则来改(比如我不会的单词,除法,乘法啥的用拼音代替,IDC_CHUFA)

MFC基于对话框——仿照Windows计算器制作C++简易计算器

二、设置成员变量

在CALDlg.h(自己的项目名Dlg.h头文件中),添加公有变量和私有变量

MFC基于对话框——仿照Windows计算器制作C++简易计算器

 MFC基于对话框——仿照Windows计算器制作C++简易计算器

公有变量:

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中的

MFC基于对话框——仿照Windows计算器制作C++简易计算器

初始化代码:

    //初始化成员变量
	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计算器 私信领取百度网盘链接文章来源地址https://www.toymoban.com/news/detail-453214.html

到了这里,关于MFC基于对话框——仿照Windows计算器制作C++简易计算器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MFC(十三)多个对话框

    1.打开类视图,右键项目---类向导--添加Cpropsheet类,命名为mypropsheet CPropertySheet 是 MFC 的一个类,用于创建包含多个属性页的对话框。它可以使用内置的向导模式,向用户显示“下一步”和“上一步”按钮 2.在Cmypropsheet.h中,声明三个属性类的对象  3.在构造函数里,把三个对

    2024年02月08日
    浏览(48)
  • MFC(十二)多个对话框

    我们来制定多个对话框,每个对话框都有不同的功能,单击下一步,即可跳转到下一个对话框 1.新建一个启动按钮 2.在资源视图,Dialog里面,右键--添加资源----dialog====选择IDD PROPPAGE_SMALL新建 属性页,改名为PROP01 3.打开工具箱,添加group box,group box控件的作用是建立了一个分

    2024年02月07日
    浏览(50)
  • MFC为对话框资源添加类

    VC6新建一个对话框类型的工程; 建立之后资源中默认有2个对话框,一个是主对话框,About这个是默认建立的关于版权信息的; 然后主对话框有对应的.h和.cpp文件;可以在其中进行编程;   默认建立的有一个 关于 对话框;   在资源中新插入一个对话框,IDD_DIALOG1是对话框I

    2024年02月01日
    浏览(47)
  • MFC 对话框与控件的使用

    1、 熟悉 Windows 对话框应用程序开发的基本过程; 2、 学习标准控件的使用; 3、 学些 CommonDialog ActiveX 控件的使用; 4、 练习较复杂的交互式操作的控制流程; 5、 练习文件输入/输出流的使用。 实现一个具有一定实用价值的通讯录程序设计。界面如图所示 ①界面的基本设计

    2024年02月05日
    浏览(42)
  • MFC 给对话框添加图片背景

    在windows开发当中做界面的主要技术之一就是使用MFC,通常我们看到的QQ,360,暴风影音这些漂亮的界面都可以用MFC来实现。今天我们来说一下如何用MFC美化对话框,默认情况下,对话框的背景如下: 那么,我们如何将它的背景变成如下界面呢,而且还要保留对话框的移动功能,

    2024年02月06日
    浏览(46)
  • MFC--对话框的一个画图控件-HighSpeedChart

    下载链接在最下面  (免费) 可在vs2022,vs2019等vs版本使用  成果展示 下载好文件后,将  整个文件夹,添加到项目中,  1.之后,将控件拖到对话框里,修改属性到与图片相同            2.为对话框添加类,我这里添加的是  3.为控件增加变量,因为不是VS自带的控件 4.点

    2024年02月04日
    浏览(84)
  • MFC 单文档弹出对话框 标题图标

    创建MFC时 1、应用程序类型:以单个文档-项目样式选择MFC标准 菜单关联对话框  2、菜单关联-资源视图中的Menu-IDR_MAINFRAME(此处看想关联谁,如果是想关联一个对话框,那就先创建一个对话框再进行关联,如果是想关联一个类,可以看函数在哪个类下面从而进行关联) a.关联

    2024年02月06日
    浏览(42)
  • MFC第十八天 非模式对话框、对话框颜色管理、记事本项目(查找替换、文字和背景色、Goto(转到)功能的开发)

    a)调用CDialog::Create函数实现,例如:QQ的聊天框,记事本的查找等。 b)非阻塞,对象的生命期必须足够,否则就析构时摧毁了。 c)可以采用堆空间申请多例模式,也可以用全局或者成员。 d)EndDialog只对模式对话框有效,对非模式对话框无效,如果要摧毁调用DestroyWindow (只是隐

    2024年02月17日
    浏览(56)
  • MFC为资源对话框添加消息处理函数和初始化控件

    现在我VC6新建了一个对话框工程;又在资源添加了一个新的对话框,并为新的对话框添加了名为CTestDlg的类; 在主对话框的cpp文件包含#include \\\"TestDlg.h\\\"; 在主对话框的cpp文件的OnInitDialog()成员函数中,添加2句,     CTestDlg tdlg;     tdlg.DoModal(); 就可以弹出这个对话框; 在新

    2024年01月18日
    浏览(49)
  • 【windows编程之对话框】对话框原理,对话框的创建

    在本章节中我们来讲解Windows/Win32编程中对话框的原理和对话框的创建,我们在前几篇章节中讲解到了普通窗口中回调函数的处理,在普通窗口的窗口消息处理函数(回调函数)中,系统会首先调用我们自己写的回调函数,我们自己编写的回调函数没有处理的消息,才会交给系

    2024年02月03日
    浏览(89)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包