提示:MFC实现计算器系列,后一篇均在前一篇基础上改进
做计算器当然是用对话框最简单了,用什么单文档,
在前面有介绍过怎么建立单文档项目,对话框就是在那里改一下,勾选对话框就好了,其他默认就行,如下:

然后,打开资源视图界面,点击Dialog,这里有两个IDD_**,其中一个是自带的(IDD_ABOUTBOX),一般用于显示版本信息;另一个就是运行后会显示出来的对话框界面,IDD_**(你的项目名)_DIALOG,(IDD_JSQ0718_DIALOG),点开就行了,这就是你目前直接运行会出现的界面。

然后就是设计界面了,先把自带的控件干掉,可以选中之后按delete,或者鼠标右键删掉,
随后打开工具箱就可以了,拖拽工具箱控件到界面,然后更改控件属性(比如可以修改控件属性Caption,按钮上的标题--像按钮上的提示字符一样),其他属性也可以根据需求改动,暂且不表。接下来开始实现对话框计算器:
1、先拖15个按钮,修改Caption属性,分别标记为0-9和+-*/=,然后需要显示计算结果,添加一个Static Text 用来显示文本(输出结果显示),此外还添加了一个Static Text 当作标签,用于提示。至此界面设计完成。此外,这些控件还有一个重要的属性即ID号,这个ID确定了控件资源,唯一标识控件。(就像是一个名字,标记)设计结果如下图:(./清零/删除,三个按钮为后续添加,可不理会)

如何响应这些按钮?这里简单多了,直接把鼠标放在按钮控件上,左键双击(就会给你自动添加消息响应事件,不过是默认的),也可以右键,添加事件处理程序(这时你会看到还会有添加类,添加成员变量这种选项,这当然都是可以的,后面再说,此处暂且不管),你可以修改函数名,不使用默认名。
添加之后,进入对应函数里面,就可以写代码了,当点击这个按钮之后,就会实现这个函数里面的内容,可以直接写一个Message()试一下,无妨;
显然,需要给每一个按钮都添加一个事件处理程序,然后在每一个函数里面,把当前点击的按钮所代表的字符添加到表达式中,以形成最后的表达式以供计算。当然,这里存储表达式的CString需要是一个View的成员变量,这样才能给View的每一个函数使用,且能够保存下来。如下:
1 void CJSQ0718Dlg::OnBnClickedButton13() 2 { 3 // TODO: 在此添加控件通知处理程序代码 4 result += '*'; 5 }
3、计算表达式:
表达式的计算自然是点击等号=之后,所以把计算代码都放在了等号按钮的事件处理程序里面,同样,调用Tool去处理表达式,可以得到一个double类型的返回值,这就是计算结果了,
double result_value = tool.Compvalue(tool.Trans(index));
(Tool实现在MFC实现计算器01之单文档)
4、显示输入文本:
每当点击一下按钮之后,都要在输出区域做出相应的显示,展示当前最新的表达式,输出到了一个Static Text控件。
怎么做这个输出事情?转到另一篇博客 ---->> 自学MFC(二):Static Text控件
简而言之:首先修改属性ID(此时控件ID是 IDC_STATIC ),修改为 IDC_STATIC_TEXT(反正IDC_STATIC不行,加个后缀就可以,或者你随意,命名规范一下就好了,然后,可以为其添加一个变量(主要是方便)(因为ID其实也已经唯一标识了),鼠标右键,添加变量Text_result,在View.h文件中会多出来一句 CStatic Text_result; ,现在就可以愉快的使用这个变量了,利用SetWindowText()函数来修改StaticText控件的值。
Text_result.SetWindowText(result); 这样就可以把当前表达式的值,显示在控件上了,
每点击一下按钮都显示当前的最新表达式,在每一个事件处理程序都加上这一句话就好了,不过在等号里,还需要把计算出来的double结果转化成字符,也一同表示出来。

至此,完成对话框的计算器。
还是存在很多Bug的,后续再改进。MFC实现计算器03之加需求以及健壮性要求
2022-08-10(0718,拖延症。。)
浙公网安备 33010602011771号