目录
写在前面:
Part 1:美美的设计一下计算器的布局
1.描述文字:
编辑
2.ID:
Part 2:美美熟悉一下计算器的工作流程
Part 3:美美设计一下控件功能
1.edit control:
2.相关变量初始化:
3.1运算符按键
3.2数字按键
3.3关于UpdateData()函数
3.4清零按键
3.5等号按键
写在前面:
接上集,我们已经创建好了一个什么用都没有的对话框,我们要做一个简易的计算器,就需要以下几个控件,如果不懂下面的界面是咋出来的建议复习上一集:
点我来上滑湿人自己的MFC第一课!
1.edit control:用来显示计算器的表达式和结果
2.button:用来输入表达式并进行相关运算
3.group:用来框柱单选框,提示用户同一框架下的若干选项
4.radio button:用于三角函数与对数的运算
5.text:用于文本的提示
Part 1:美美的设计一下计算器的布局
、
修改按钮相应的属性:
打开对话框,右键按钮,选择属性,会在屏幕右侧出现一个属性框,这个就是该控件对应的属性,此时单击其他的控件,会变成被点击的控件的属性,这里我们需要改这几项:
1.描述文字:
这个代表的是运行时这个按钮上面显示的文字
2.ID:
这个代表的是这个按钮在程序中相关的函数中出现时的名称
Part 2:美美熟悉一下计算器的工作流程
计算器要先完成基本的加减乘除,就需要有一个变量用来存储我们输入的第一个数(tempvalue),还需要一个变量用来存储结果的值(result),还需要一个变量判断进行的运算(sort),还需要一个变量判断后面是否添加数字(append)。
下图展示了一个计算器的基本的运行流程:
Part 3:美美设计一下控件功能
1.edit control:
首先,编辑框想要显示变量,就需要有一个变量用来存储它要显示的值,因此我们为其添加变量,定义变量名称为m_edit1。
我们需要先右键编辑框,之后添加变量,类别更改为“值”,输入名称为“m_edit1”,变量类型选择“double”,之后点击完成。
2.相关变量初始化:
前面我们提到了,我们需要用到变量tempvalue,result,sort和append,根据他们的用途,我们将前两个变量定义为double型,便于我们后续添加小数点的功能;后两个是状态的判断,因此我们将其设定为int型。
首先,在解决方案资源管理器中打开名为“项目名Dlg.h”的头文件,找到名为“class CcalculatorDlg : public CDialogEx”的类,添加这四个变量,访问权限限定为public,修改后程序如下:
class CcalculatorDlg : public CDialogEx
{
// 构造
public:
CcalculatorDlg(CWnd* pParent = nullptr); // 标准构造函数
public:
double tempvalue;
double result;
int sort;
int append;
// 对话框数据
...
}
之后,在解决方案资源管理器中打开名为“项目名Dlg.cpp”的源文件,找到名为“CcalculatorDlg::CcalculatorDlg(CWnd* pParent /*=nullptr*/)”的构造函数,将这四个变量初始化为合适的值,修改后程序如下:
CcalculatorDlg::CcalculatorDlg(CWnd* pParent /*=nullptr*/)//构造函数
: CDialogEx(IDD_CALCULATOR_DIALOG, pParent)
, m_edit1(0)
{
tempvalue = 0;//临时值
result = 0;//结果值
sort = 0;//计算法则判断 1+ 2- 3* 4/
append = 0;//判断后续是否输入数字: 1输入 0不输入
point = 0;//未输入小数点
count = 1;//0:未输入小数部分
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
3.button:
在对话框中双击按钮,系统会自动生成它的相关函数原型与声明,我们只需要完成函数体即可。
3.1运算符按键
由上面的工作流程图可知,当我们按下操作符按键时,sort要变成相应运算法则的变量值,如按下+按键,sort就变成1,后续按下=按键时对sort的值switch一下就可以得出结果。
其次,之前输入的数字存储在result中,我们按下运算符按键时,将之前输入过的变量值赋值给tempvalue,之后让编辑框中的变量值清零,最后让append=1,代表我们已经按下了符号按钮,后续输入的将会是一个新的数字。
加号按钮响应函数如下,其余运算符按钮同理
void CcalculatorDlg::OnBnClickedButtonplus()
{
sort = 1;
tempvalue = result;
m_edit1 = 0;
append = 1;
}
3.2数字按键
由上面的工作流程图可知,当我们按下数字按键时,如果append=1,说明我们刚按下了符号按钮,这是一个新的数字,因此将result的值清零。如果append!=1,就将result*10+按下的数字按键对应的值,将新的result赋值给编辑框的变量m_edit1;将append变量置0,表示我们正在输入数字。
数字1按钮响应函数如下,其余运算符按钮同理
void CcalculatorDlg::OnBnClickedButton9()
{
if (append == 1)
result = 0;
result = result * 10 + 9;
m_edit1 = result;
append = 0;
UpdateData(FALSE);
}
3.3关于UpdateData()函数
UpdateData(TRUE);//用于将屏幕上控件中的数据交换到变量中。
UpdateData(FALSE);//用于将数据在屏幕中对应控件中显示出来。
3.4清零按键
由上面的工作流程图可知,当我们按下清零按键时,将所有数据赋值为它构造函数时的初值,响应函数如下:
void CcalculatorDlg::OnBnClickedButtonc()
{
tempvalue = 0;
result = 0;
m_edit1 = 0.0;
UpdateData(FALSE);
}
3.5等号按键
由上面的工作流程图可知,当我们按下等号按键时,switch一下我们之前的sort值,对result和tempvalue进行相应的运算操作,响应函数如下:
void CcalculatorDlg::OnBnClickedButtonequal()
{
switch (sort) {
case 1:
result += tempvalue;
break;
case 2:
result = tempvalue - result;
break;
case 3:
result *= tempvalue;
break;
case 4:
result /= tempvalue;
break;
}
m_edit1 = result;
UpdateData(FALSE);
}