基于对话框的MFC简易计算机编写Visual Studio 2022
一,创建新项目
点击创建新项目

在搜索栏中查找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; // 准备输入新的数字
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)