面向对象程序设计课第六次作业
面向对象程序设计课第六次作业
此次作业是实现计算器的 GUI 界面。虽然看起来并不是很难,但深坑还是挺多。新建项目后把原来的输入、输出、计算等文件导入并 include 在新的 CalculatorDlg
类中。
难点及解决
-
焦点问题
由于有三个 EDIT 框,启动后会自动将焦点聚焦于文件输入输出路径框,而无法响应主要计算的键盘输入,因此我添加了一个按钮来使另外两个 EDIT 框失焦,这样就可以用键盘输入了。 -
键盘输入问题
在网上了解到想要从键盘输入,需要调用PreTranslateMessage
函数实现,对每一个按键进行 switch case 逻辑处理然后显示到输出框。这里需要使用到虚拟键码,还需要判断 shift 键是否按下等等。而主键盘的按键没有虚拟键码,只有对应的值。 -
输入格式问题
这个问题很复杂,需要使输入的式子满足计算的要求,因此,不能多个小数点/加减乘除(除了减号)同时上屏,若按下需要忽略,所以,我声明了一个 bool 变量 noPoint 来标记是否输入了小数点,用一个 int 变量 typedSign 来累计输入的符号,若大于 1 则不可输入除减号外的符号,用一个 bool 变量 clickedEqual 来标记是否按下了等于号,按下后,不可输入数字,可以输入符号(除了小数点),以便进一步计算,若按下数字则清屏。
Github 链接
https://github.com/ladit/object-oriented/tree/master/Calculator GUI
参考链接
- MFC教程
http://www.jizhuomi.com/software/257.html - 初始化工程与建立计算器
http://blog.csdn.net/lisonglisonglisong/article/details/39854395 - 文件对话框
http://www.jizhuomi.com/software/173.html - 焦点处理
http://newthnote.blogbus.com/logs/67403982.html - 虚拟键码
http://baike.baidu.com/view/555571.htm
以及其他未记录的博客/问答……