一,创建新项目

点击创建新项目

在搜索栏中查找MFC,点击MFC应用并点击下一步生成项目工程

 可以选择是否定义项目名称,和项目保存路径

选择应用程序类型->基于对话框->完成

如下图所示即创建成功

二,计算器界面显示

点击最左侧工具箱

左侧若没有显示工具箱,则就将鼠标光标挪至上边框->视图->点击工具箱

三,按键放置操作

鼠标右击TODO:在此放置对话框控件,选择删除

同上删除“确认”以及“取消”键

得到界面如下

鼠标移动至工具箱选择Edit Control

在框图界面处选择位置放置

通过拖拽调整大小以及位置

再摆放按键位置,工具箱->Button,拖拽至窗口选择合适位置放置

同上再摆放15个按键,并放置在合适位置。

点击Button1,右击->选择属性或者在操作页面右下有属性栏,选择描述文字可以进行名称修改,分别将每个按键更改成1,2,3......9,0,+,-,*,%,=,并合理布局界面

最终页面布局如图:

完成好按键布局,命名修改后进行下一步操作,对每个按键动作编辑。

四,运算数操作

鼠标双击“1”号键即可跳转至MFCApplicationDlg.cpp界面

并生成void CMFCApplication1Dlg::OnBnClickedButton1()函数,

当void CMFCApplication1Dlg::OnBnClickedButton1()函数生成时,

在我们的MFCApplication1Dlg.h: 头文件中会有相应的映射

如下图所示,第一个红色框图中为示例编辑框对应映射,第二个为按键“1”的映射,

仿照上方操作依次对全部按键生成对应函数以及映射关系

MFCApplication1Dlg.h: 头文件中定义初始变量,用于保存运算符和运算数的信息

CString str1;
CString strResult;


float m_nOperand1=0; // 第一个操作数
float m_nOperand2=0; // 第二个操作数
int m_nCurrentOp;    // 当前运算符(例如,加法、减法等)



bool m_bNewNumber=FALSE; // 用于跟踪是否输入第一个操作数

//str1用于存储并显示按键输入,strResult用于存储显示我们的最终运算结果

CString str1;
CString strResult;

//m_nOperand1,m_nOperand2    来存储我们的两个操作数

//m_nCurrentOp    存储运算符

//m_bNewNumber    跟踪每个输入的操作数


float m_nOperand1=0; // 第一个操作数
float m_nOperand2=0; // 第二个操作数
int m_nCurrentOp;    // 当前运算符(例如,加法、减法等)

bool m_bNewNumber=FALSE; // 用于跟踪是否输入第一个操作数

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


	// 更新第一个操作数
	m_nOperand1 = m_nOperand1 * 10 + 1;

	// 显示当前操作数
	str1.Format(_T("%.3f"), m_nOperand1);
	SetDlgItemText(IDC_EDIT1, str1);


	if (m_bNewNumber)//判断是不是运算数
	{
		m_nOperand1 = 0; // 开始新数字
		m_bNewNumber = false;
	}
}

对0-9的每个按键函数只需要对下图框图中的操作数进行修改,即将末尾数字修改为当前按键值即可。

到“0”键为止

五,运算符操作

加法操作

减法操作

乘法

除法

等于号操作

六,效果展示

计算器效果

七,代码附录

初始变量定义,位于MFCApplication1Dlg.h: 头文件 public下,红色框图中变量为自己定义

CString str1;
CString strResult;

float m_nOperand1=0; // 第一个操作数
float m_nOperand2=0; // 第二个操作数
int m_nCurrentOp;    // 当前运算符(例如,加法、减法等)

bool m_bNewNumber=FALSE; // 用于跟踪是否输入第一个操作数

运算符和运算数代码位于  MFCApplication1Dlg.cpp: 实现文件  下

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

	

	// 更新第一个操作数
	m_nOperand1 = m_nOperand1 * 10 + 1;

	// 显示当前操作数
	str1.Format(_T("%.3f"), m_nOperand1);
	SetDlgItemText(IDC_EDIT1, str1);

	if (m_bNewNumber)
	{
		m_nOperand1 = 0; // 开始新数字
		m_bNewNumber = false;
	}
}


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

	if (m_bNewNumber)
	{
		m_nOperand1 = 0; // 开始新数字
		m_bNewNumber = false;
	}

	// 更新第一个操作数
	m_nOperand1 = m_nOperand1 * 10 + 2;

	// 显示当前操作数
	str1.Format(_T("%.3f"), m_nOperand1);
	SetDlgItemText(IDC_EDIT1, str1);

}

void CMFCApplication1Dlg::OnBnClickedButton3()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_bNewNumber)
	{
		m_nOperand1 = 0; // 开始新数字
		m_bNewNumber = false;
	}

	// 更新第一个操作数
	m_nOperand1 = m_nOperand1 * 10 + 3;

	// 显示当前操作数
	str1.Format(_T("%.3f"), m_nOperand1);
	SetDlgItemText(IDC_EDIT1, str1);
}

void CMFCApplication1Dlg::OnBnClickedButton4()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_bNewNumber)
	{
		m_nOperand1 = 0; // 开始新数字
		m_bNewNumber = false;
	}

	// 更新第一个操作数
	m_nOperand1 = m_nOperand1 * 10 + 4;

	// 显示当前操作数
	str1.Format(_T("%.3f"), m_nOperand1);
	SetDlgItemText(IDC_EDIT1, str1);
}


void CMFCApplication1Dlg::OnBnClickedButton5()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_bNewNumber)
	{
		m_nOperand1 = 0; // 开始新数字
		m_bNewNumber = false;
	}

	// 更新第一个操作数
	m_nOperand1 = m_nOperand1 * 10 + 5;

	// 显示当前操作数
	str1.Format(_T("%.3f"), m_nOperand1);
	SetDlgItemText(IDC_EDIT1, str1);
}


void CMFCApplication1Dlg::OnBnClickedButton6()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_bNewNumber)
	{
		m_nOperand1 = 0; // 开始新数字
		m_bNewNumber = false;
	}

	// 更新第一个操作数
	m_nOperand1 = m_nOperand1 * 10 + 6;

	// 显示当前操作数
	str1.Format(_T("%.3f"), m_nOperand1);
	SetDlgItemText(IDC_EDIT1, str1);
}


void CMFCApplication1Dlg::OnBnClickedButton7()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_bNewNumber)
	{
		m_nOperand1 = 0; // 开始新数字
		m_bNewNumber = false;
	}

	// 更新第一个操作数
	m_nOperand1 = m_nOperand1 * 10 + 7;

	// 显示当前操作数
	str1.Format(_T("%.3f"), m_nOperand1);
	SetDlgItemText(IDC_EDIT1, str1);
}


void CMFCApplication1Dlg::OnBnClickedButton8()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_bNewNumber)
	{
		m_nOperand1 = 0; // 开始新数字
		m_bNewNumber = false;
	}

	// 更新第一个操作数
	m_nOperand1 = m_nOperand1 * 10 + 8;

	// 显示当前操作数
	str1.Format(_T("%.3f"), m_nOperand1);
	SetDlgItemText(IDC_EDIT1, str1);
}


void CMFCApplication1Dlg::OnBnClickedButton9()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_bNewNumber)
	{
		m_nOperand1 = 0; // 开始新数字
		m_bNewNumber = false;
	}

	// 更新第一个操作数
	m_nOperand1 = m_nOperand1 * 10 + 9;

	// 显示当前操作数
	str1.Format(_T("%.3f"), m_nOperand1);
	SetDlgItemText(IDC_EDIT1, str1);
}


void CMFCApplication1Dlg::OnBnClickedButton10()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_bNewNumber)
	{
		m_nOperand1 = 0; // 开始新数字
		m_bNewNumber = false;
	}

	// 更新第一个操作数
	m_nOperand1 = m_nOperand1 * 10 + 0;

	// 显示当前操作数
	str1.Format(_T("%.3f"), m_nOperand1);
	SetDlgItemText(IDC_EDIT1, str1);
}

/*------------------------------------------*/
/*           运算符操作                     */
/*------------------------------------------*/
void CMFCApplication1Dlg::OnBnClickedButton11()
{
	// 如果不是新的数字,则执行之前的操作
	if (!m_bNewNumber)
	{
		// 执行加法
		m_nOperand2 += m_nOperand1;
	}

	// 设置当前操作符为加法
	m_nCurrentOp = 1; // 1 表示加法
	// 下一个数字将开始新的操作数
	m_bNewNumber = true;
}


void CMFCApplication1Dlg::OnBnClickedButton12()
{
	// TODO: 在此添加控件通知处理程序代码
	if (!m_bNewNumber)
	{
		// 执行减法
		m_nOperand2 = m_nOperand1;
	}

	// 设置当前操作符为减法
	m_nCurrentOp = 2; // 2 表示减法
	// 下一个数字将开始新的操作数
	m_bNewNumber = true;
}


void CMFCApplication1Dlg::OnBnClickedButton13()
{
	// TODO: 在此添加控件通知处理程序代码
	if (!m_bNewNumber)
	{
		// 执行乘法
		// 注意:这里应该先检查m_nOperand2是否已经被设置,否则第一次点击乘法时应该使用m_nOperand1的值
		if (m_nCurrentOp == 0) // 如果当前没有操作符,则使用m_nOperand1的值
		{
			m_nOperand2 = m_nOperand1;
		}
		else
		{
			m_nOperand2 *= m_nOperand1;
		}
	}

	// 设置当前操作符为乘法
	m_nCurrentOp = 3; // 3 表示乘法
	// 下一个数字将开始新的操作数
	m_bNewNumber = true;
}


void CMFCApplication1Dlg::OnBnClickedButton14()
{
	// TODO: 在此添加控件通知处理程序代码
	if (!m_bNewNumber)
	{
		// 执行除法
		// 注意:这里应该先检查m_nOperand2是否已经被设置,否则第一次点击乘法时应该使用m_nOperand1的值
		if (m_nCurrentOp == 0) // 如果当前没有操作符,则使用m_nOperand1的值
		{
			m_nOperand2 = m_nOperand1;
		}
		else
		{
			m_nOperand2 = m_nOperand2/ m_nOperand1;
		}
	}

	// 设置当前操作符为除法
	m_nCurrentOp = 4; // 4 表示除法
	// 下一个数字将开始新的操作数
	m_bNewNumber = true;
}



void CMFCApplication1Dlg::OnBnClickedButton15()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_nCurrentOp == 1) // 加法
	{
		m_nOperand1 += m_nOperand2; // 执行加法
	}
	else if (m_nCurrentOp == 2) //减法
	{
		m_nOperand1 = m_nOperand2 - m_nOperand1;// 执行减法法
	}
	else if (m_nCurrentOp == 3)//乘法
	{
		m_nOperand1 = m_nOperand2 * m_nOperand1;//执行乘法
	}
	else if (m_nCurrentOp == 4)//除法
	{
		m_nOperand1 = m_nOperand2 / m_nOperand1;//执行除法
	}

	// 显示结果
	strResult.Format(_T("%.3f"), (float)m_nOperand1);
	SetDlgItemText(IDC_EDIT1, strResult);
	// 重置操作数,准备下一次运算
	m_nOperand2 = m_nOperand1; // 将结果设置为第2个操作数,以便进行连续计算
	m_nCurrentOp = 0; // 重置操作符
	m_bNewNumber =false; // 准备输入新的数字
}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐