面向对象程序设计课第六次作业

面向对象程序设计课第六次作业

此次作业是实现计算器的 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

参考链接

以及其他未记录的博客/问答……

posted @ 2016-06-06 01:27  Ladit  阅读(160)  评论(2编辑  收藏  举报