MFC入门留念

由于某些原因,需要使用MFC完成一个如下的项目:
在这里插入图片描述
于是花了大约两天半学习并完成相应的功能。现记录如下:

一、下载VS2019
之前一直没研究过这个“宇宙第一IDE”,所以刚上手有点手忙脚乱,第一次竟然装到了系统盘,然后存储空间瞬间就不足了(其实本来是选择装D盘的,但它最后一步会提示说装到D盘会影响速度)。虽然这次只是写MFC,但是还是不知道最少需要装点什么东西,所以就直接勾了“基于C++的桌面程序”一大项。

二、学习MFC
刚开始是跟着B站上一个视频学,由于没跟着敲,所以浪费了几乎整整半天也没学到什么,倒是学了不少北京话?。然后就决定自己先敲敲看。本来打算写单个文档的那种程序,不过后来发现不需要这么多功能,就选择了基于对话框的。

这之后,在碰了不少钉子(比如,各种新的类型,像CString,_T,TEXT,TRUE,怎么用已有的知识转化过去;还有就是,一些函数它不准用了,需要添加一个宏_CRT_SECURE_NO_WARNINGS,但是最后release的时候还是会报错,所以不得不改成安全的函数;还有就是,按钮竟然不可以一键均匀分布!!我不想设坐标,最后就随便靠眼睛量量了;还有,VS的一些视图,像什么,资源视图、类视图、解决方案视图,把它们安排到一个合适的位置就花了不少时间;此外,我还不会在VS里输出调试数据,只能用MessageBox输出,而且这个函数必须传CString进去,特别麻烦;……)后,终于能大概理解MFC的代码是什么样的一个逻辑了(也只是大体逻辑,现在有很多代码仍然云里雾里),这个时候才开始写真正的代码。

三、着手写代码
首先,新建个项目,把原来Dialog里面的控件全选、Delete,然后拖进去四个按钮和一个ListCtrl,四个按钮分别对应题目的五个要求(我把前两条都放在一个按钮里面做了),然后逐个实现按钮的API达到与ListCtrl交互的目的。
按钮的逻辑比较简单,双击就能定位到单击它触发的函数。ListCtrl没想查说明文档,是跟着视频来的。
首先,在Dialog初始化的函数里给ListCtrl添加表头,用到的方法是InsertColumn,这里VS的优点就体现出来了,敲函数的时候,它会一个参数一个参数地提示,虽然我看不懂类型是什么,但根据参数名也能猜出来要填什么。
插入表头之后就是从文件里读数据并显示到表格中了(其实还有一步,设计表格中item的类,我在这里做的特别丑,他说六个成绩我就从score1一路设到score6,最后复制粘贴再改,改到怀疑人生)。模仿视频中的做法,先读到一个容器中(这里本来在其他地方看到的方法是用CFile,但是没学过,最后用了相对来说比较熟悉的ifstream。之前说的安全问题就是在这里遇到的,视频里是用的strtok()来分割字符串,但VS认为不安全,最后学了一下怎么用strtok_s()),再把这个容器里面的东西放进ListCtrl中(个人认为这样会比较方便维护表格中当前的数据,我个人的做法是用了一个vector保存当前数据的,这样就不用学怎么从表格中取数据了),而且,用到了STL容器就可以很轻松地完成题中求和、求均值和排序的需求了。
在这之后是筛选数据,这个也不难,查一下怎么清空ListCtrl就行了(DeleteAllItems()),然后把筛选出来的数据再放进去。不过这里有一个从键盘读取数据的操作卡了一下。我的想法是用一个对话框接收数据,但是弹出对话框得到数据应该是没有API的,因此看了这篇博客,遂解决。
最后是画饼图,借鉴了一下这一份代码
然后在改了几个小地方,整合了几个函数,整个项目就赶完了。

总结一下,这次写的项目时间上太仓促,准备得不够充分,现学现用。所幸项目需求不多,难度不大,有时间浪费,不然大概率就咕了。代码部分做不到写算法题那样整体先想好再一气打出来,前后有时候就不会很协调。可以想见,如果以后参加了工作,事先对代码的构想是非常必要的。

最后还是附上代码吧,万一有人需要呢?
链接: https://pan.baidu.com/s/1pSn_ELoWblfOvBxY6dc0Ww
提取码: 2v5c

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值