这里是代码传送门Calculator

1作业要求

这次作业如果用几个字来描述,那么就是:百度百度百度百度再次百度

2第六次作业:

界面库选择:VS2015 MFC

实现步骤:

1.MFC界面雏形

表示VS是寒假安好的,但是我却一直因为不会用因为是坏的,感谢pbb亲授如何建立与执行项目(虽然我后来还是百度到了)

之后先是将DEV C++ 上的文件移植到VS上出了错,原因是,VS认为freopen不安全,然后又是在别人的帮助与查找资料的情况下,知道了解决方法:忽略警告

#pragma warning(disable:4996)//加在使用了freopen的.cpp处即可

然后就是正式开始啦,我一开始并不知道如何将MFC与自己的代码联系起来,为了熟悉一下MFC,我百度了很多个类似于制作计算器的网址,按照步骤全部做了一遍:

MFC制作简单计算器1

MFC制作简单计算器2

然后按钮什么的也都不懂,也百度了好久:

MFC基于对话框编程:[5]按钮的使用

然后这个时候,很幸运的偶然机会下,sy妹子聊了起来,然后她很热心的一步一步截图教了我最基础的按键响应,如何让编辑框出现表达式的形式.....
做完之后大概是这个样子的:

2.实现基本的计算功能

弄完这一步后,我突然就明白了,可以将原来的代码,按类,一个一个添加进这个MFC的项目去,因为这个项目一开始创建就是选择C++的MFC,所以是不会冲突的,然后只要在‘=’这个button的函数中,嵌入原来在DEV C++的main 里面的功能,把表达式入栈,计算,都在这个函数里面处理,再把结果的double形式再变成字符型传回,即可完成一次计算

然后这里会遇见一个最耗时的问题:如何在CString类与String类质检进行转换?
经过百度了好久好久...以下是转换:

string tmp1 = “***”;
CString tmp2;
tmp2 = tmp1.c_str();//string要先变成 *char 才可以赋值给CString类
CString expression =“***” ;
USES_CONVERSION;
string tmp(W2A(expression))//我没看懂,但是亲测可用,虽然后面没有用到,但是是后话了

解决了这个问题,接下来就是将主函数中的东西照搬到 “=” 这个button里面就好了,在照搬过程中,可以顺便解决掉关于附加的第七次作业类名的要求.

3.实现按键响应功能

从这一步开始,我独自一人便跳入了深坑,一去不复返。。。
首先来一个教程:如何识别按键响应

啊..我是看了这个人的问题后才懂的,得先识别是否按键,然后再获取按键,这里要先知道一个前提:每一个按键对应一个ASCII码,然后它获取ASCII码后进行匹配,而我们做的就是:重载键盘的按键响应函数,将需要的按键的ASCII记录,让他实现我们需要使用的功能,仅此而已

附上响应的编码:在VC/MFC中响应键盘按键

但是!!你在重载的时候会发现,字母表上面那一排是没有宏定义的....
我找了很久后....明白了那个看起来乱七八糟的东西是宏定义...明白了按键与ASCII之间的关系...然后..直接百度了键盘按键的ASCII码...然后直接用ASCII来弄:

键盘响应代码

3.5小细节

做完前面的之后,你会发现...好激动...终于做出来的..但是不要高兴的太早...前面有一些比较坑的地方,我在这里列出来:

细节1:

BackSpace:string与CString如何删除最后一个字符

最后实现代码是:

    CString expression;expression = expression.Left(expression.GetLength() - 1);String ToCalexpression;ToCalexpression = ToCalexpression.substr(0, ToCalexpression.length() - 1);

细节2:

ESC:支持清空
这里强调一个::默认给你的确定取消你删掉就好了,但是!对应的函数(里面的内容)千万千万不要删了....不然你会关!不!掉!程!序!,因为时间太短..我也没深究...没时间的孩子就不要像我这样没事找事了...

细节3 :

实现为“×”"÷",这个比较坑.当你弄了之后才发现,这看似是一个符号实际上是占2个字符的大小的...这样子就没有办法直接给原来的代码用了..解决办法2个...一个是改代码..我想了想..太麻烦...
然后选择了第二种....一个用CString显示到编辑框..然后就偷偷用另外一个string的变量.来进行实际的运算操作...这个就是为什么我说,我后来发现不需要将CString类变成string类的原因

4.支持文件输入输出:

因为不是一一次性做完...我后面打开的时候找不到Dialog的图形界面窗口了..

这里需要实现的功能是,用按钮实现弹窗,并支持查找文件与直接输文件:
这里也是需要大量资料的:

MFC实现弹窗这里注意看7.8楼说的

按钮浏览文件

至于如何在编辑框实现与手动输入与确定,与第一级Dailog类似,将文件输入输出放置于确定按钮,然后将原DEV C++功能搬进来即可

一些细节:

实现一次操作后要清空表达式的值
(还有啥一下子想不起来了)

做完之后,再优化一下,界面就变成这样子的了:

吐槽一下,我知道界面很丑界面很丑界面很丑....不要喷我不要喷我不要喷我
(注:最后一个是强行用了一下MessageBox...

UpdateData(TRUE);CString cstr;cstr = "Author :  Anani_leaf\nBlog    :  http://home.cnblogs.com/u/Anani-leaf/\n";MessageBox(cstr);UpdateData(FALSE);

5.附加作业:

关于cmd模型下的支持我自己的没有完成....所以这方面不太像弄...如果有弄好的请务必告诉我怎么弄.....大概就这样子吧..虽然没成功,但是还是附上比较有用的资料吧:
获取命令行参数

小结:

虽然最后作业差一步cmd的没弄完.....但是总体是好的....
这应该算是我大学以来坚持的第二久的有实体的事情了....

这个算是我做的第一个比较类似于项目的东西,可以说,虽然这次作业做的有点吐血的,而且大部分都是查资料出来的,但是我觉得这次作业对我而言一个比前面5次作业的收获都大,不仅仅是知识方面,虽然大部分是查出来的,但是你把代码小心翼翼贴上去的时候,你发现可以执行的时候,这个感觉...真的是...挺好的...而且虽然不是很懂,但是弄多了..总还是有一些了解的..至少这次作业,让我真正找到了,C++做除了acm以外其他的事情,虽然我并不知道我何时(下学期还是再下学期)才会真正开始玩项目(即使不是C++),但是却给了我一种挺好的感觉(虽然过程十分的痛苦),不过说真的,终于做完了这一系列作业,颇有感触。船到桥头自然直,我只要做好自己,勿忘初心即可。

转载于:https://www.cnblogs.com/Anani-leaf/p/5561700.html

第六次作业之图形界面相关推荐

  1. c语言课程设计作业计算器图形界面,C语言课程设计--计算器(图形界面).doc

    C语言课程设计--计算器(图形界面) 扬 州 大 学 ------------------1 程序设计内容:------------------1 课程设计所补充的内容:补充的函数或算法----3,4 ...

  2. C# 第六章『交互式图形界面』◆第6节:MessageBox类

    一.MessageBox 类 MessageBox 类https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.forms.messageb ...

  3. C# 第六章『交互式图形界面』◆第4节:FileDialog类 、OpenFileDialog类、SaveFileDialog类、示例

    一.FileDialog 类 FileDialog 类https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.forms.filedial ...

  4. JAVA 作业:图形界面

    自己动手写的一个小JAVA 程序: 一个学生管理小系统,虽然很挫,但是这我学JAVA的第一步.学了2天JAVA没有白费! 1 import java.awt.*; 2 import java.awt. ...

  5. C# 第六章『交互式图形界面』◆第2节:控件(2)ListView

    一.ListView 类 ListView 类         1.定义 命名空间:System.Windows.Forms 程序集:System.Windows.Forms.dll 表示 Windo ...

  6. C# 第六章『交互式图形界面』◆第2节:控件(1)

    一.概述 在C#中,控件的基类是位于System.Windows.Forms命名空间下的Control类.Control类定义了控件类的共同属性.方法和事件,其他的控件类都直接或间接地派生自这个基类. ...

  7. C# 第六章『交互式图形界面』◆第5节:FolderBrowserDialog类、DialogResult枚举

    一.FolderBrowserDialog 类 FolderBrowserDialog 类https://docs.microsoft.com/zh-cn/dotnet/api/system.wind ...

  8. C语言开发东北大学21级大作业—活力长者社区(图形界面)(附源码)

    注:受老师许可,本程序内容与活力长者社区稍有不同.但所涉及到的功能.知识点与结构大致相似. 本程序名为 " 陆零玖酒店管理系统 " . 任何疑问欢迎留言.此源码仅供学习,请不要过度 ...

  9. python建立窗口并美化_Python GUI教程(十六):在PyQt5中美化和装扮图形界面

    在默认情况下,我们使用PyQt5创建出来的窗口和部件都是默认的样式,虽然谈不上很丑,但是也毫无美感可言.其实,在PyQt5中,我们可以有较高的自由度来自定义窗口和各种小部件的样式,通过自定义这些样式, ...

最新文章

  1. 剑指offer:把字符串转换成整数
  2. linux下内存测试mbw,【转帖】MBW内存测试
  3. 自动化工程师与python_软件测试自动化工程师用案例带你进入Python数据类型,数据结构等代码实现...
  4. laravel 定时任务
  5. 光源时间_您的国美备战时间已不足一个月!绝密国美考点、考场、光源分析送上!...
  6. Java 集合List、Set、HashMap操作一(Array转List、Set排序、HashMap遍历、Set遍历、List遍历、HashMap大小长度、List打乱顺序)
  7. Shuffle Cards(Rope大法)将一段区间的数字整体搬动
  8. 《面向对象程序设计》第六次作业(图形化界面)
  9. BAT经典面试题,深入理解Java内存模型JMM
  10. 超简单!利用查看源代码+正则表达式复制百度文库无法复制内容
  11. 教你如何用Python轻轻松松操作Excel、Word、CSV,一文就够了,赶紧码住!!!
  12. 16QAM学习(二)multisim仿真 乘法器的实现,MC1496实现信号乘法混合
  13. 【​观察】玩客币更名“链克”背后 迅雷的区块链探索之路
  14. win10重置网络命令_Win10怎么重置网络 Win10重置网络命令使用方法
  15. 异或为什么满足结合律,布尔代数与布尔环简介
  16. html5 vue bootstrap学习报告
  17. android夜间模式监控
  18. 服务器自带的防篡改,防篡改系统
  19. 高级图表常用颜色RGB参数
  20. 树莓派3B--HC-05蓝牙无线模块设置

热门文章

  1. Android事件分发小结
  2. 完美解决IE6中fixed抖动问题的方法
  3. keil接收别人发的工程打不开_STM32工程模板建立之 KEIL 开发平台设置(一)
  4. 城市天际线 android,都市天际线安卓手机版
  5. RocketMQ的安装与启动
  6. Python机器学习:多项式回归与模型泛化008模型泛化与岭回归
  7. Python机器学习:梯度下降法008如何确定梯度计算的准确性,调试梯度下降法
  8. 云控参数下发android,Oldboot鬼影又现,另一例山寨手机中运用云端远控技术的木马...
  9. mysql 创建分区索引吗_MySQL分区字段列有必要再单独建索引吗?
  10. ubuntu双系统时间同步_解决Ubuntu 16.04.6 + Win10 双系统时间错误且不一致问题