写作目的
楼主最近在整理百度网盘资源,由于空间不足需要腾出一些空间以存储当前以及对未来有用的资源。于是有好多自我感觉没用的计算机资源都要进行清理。在整理的过程中,看到了我以前学习过的MFC资源。提到MFC,我可能以后不会再研究这个框架了(除非将来工作偶尔需要),也可以说是一种放弃,放弃的原因有很多,但并不是因为它本身哪方面都不好。一言难尽,因为楼主不可能继续长时间研究这个框架。MFC实在是太强大了,要想精通并非易事,精力实在有限。楼主学习这个将近有三年(间断性学习),做课程设计、做毕业设计都用到MFC。还记得大一下学期,开始爱上编程也正是因为刚学这个框架,不然我也就不会在程序员这道路上越走越远。惭愧的是,楼主现在对这个框架的细节还不是很懂,也不太熟练。因此趁着放假的时间,同时也出于对MFC的一种热爱,在此文整理一下以前学过的东西。
学习MFC的理由
MFC最大的特点就是Windows消息机制,封装类是对系统自带的Win32 API函数(就是一些dll)进行封装。大部分把API封装成类,以“C”开头的类名就是MFC类。所以说MFC是一个半开源的框架。有一部分人说学MFC入门难,也有另一部分人说学习MFC其实比较容易的。而对我来说,学习主要还是看个人的自学能力和觉悟,当然也与学习的步骤、个人知识量有一定的关系。学习MFC入门难是因为你没有接触过这个框架或者C++语言的知识量不够。初期阶段,是最让人怀疑自己能力的时期,甚至会想放弃编程。因此这时你要摆好心态,不急躁。等你熬过了初期阶段,就会进入过程阶段的“舒适期”。所以一般熬到过程阶段的都是对这一方面慢慢产生兴趣的人。有了兴趣之后,你就不会觉得学习有多大的困难了。
MFC框架在目前的情况来看,确实不太看好其发展前景,就连微软公司都不再对其做出一些巨大的改变。有人说MFC已经被淘汰了,就好比有人说某某语言、某某工具过时了,意思是我们学习这些东西没用,浪费时间。这些话我们不可全盘肯定。毕竟每个人从事编程的方向不同,适合自己的才是最好的,别人只是提供建议。
也许你也听说过一些技术大佬总说语言或者框架只是一种工具,主要还是学习到其中编程的思想,我是有几分赞同这个观点的。我认为MFC现在还有一定的价值,价值并不是体现在它能有多少编程者去使用它,提供工作的岗位有多少,钱途多大,而是体现在学习到编程的思想。MFC封装的东西实在太多,这设计本来就是为了减轻开发者的工作量。但由于其功能实在是强大,还是需要开发者花费较多的精力去研究学习这些封装类。初期开发者使用MFC不够熟练,也会觉得比较痛苦。尤其想要开发好看的界面时,那将是一件比较麻烦的事情。因为MFC在界面方面对开发者一直都不太友好,它不像c#框架那样可以直接拖控件并能够方便布局就可看出其界面的效果。但MFC不一样,控件布局还需要运行才真正知道其效果,有时还莫名其妙的在控件外出现不可去除的多余线条,尤其你创建控件太多的时候容易出现这种情况。当你想要自绘自己想要的控件,还需要专门封装一个控件继承类,这还要写一大堆代码。
可正是因为这样,学习者学习MFC就会收获到很多知识。通过学习MFC,我们就可以理解C++面向对象(深入理解面向对象还是需要编程开发一段时间之后,再看看一本理论书《深入探索C++对象模型》,会对你有很大的帮助)以及windows消息机制,学习到开发实用性的软件接触到网络,多线程等技术原理,而这些技术以及开发的思想即便你以后不再使用MFC,再换换其他框架比如QT甚至跨语言的框架比如wpf、winfrom等,就会发现他们实现的原理大致相同。所以即便好不容易学会了MFC,再转到学习C#或者QT框架也会很快上手的。
MFC的工作前景
MFC虽然不像以前那样大受大家欢迎。由于互联网的浪潮,涌进了新的技术趋势,使得使用MFC的开发者逐渐减少。还记得上个月公司来了一个比我小一届的实习生,我们午饭时聊了一会,他说MFC已经被淘汰了,他打算毕业以后进入QT的方向。我没多说什么,因为我对QT也不太了解,毕竟在大学时因为项目的需要仅仅自学了一个月。目前只是了解它是个跨平台、完全开源的桌面框架,并且能够支持嵌入式编程。它与MFC不同,它的消息事件主要是通过以信号与槽来实现的。关于QT工作方向,据我的经历所知,它在做区块链技术方面的公司被使用到,工控软件以及其他的商业桌面程序也有时被用到,但大多数趋向于嵌入式。MFC提供岗位在工控软件方面以及其他接触硬件编程方向还有很大的空间,有些公司开发的测试工具也需要用到MFC。至于钱途,并非由框架的类型来决定的,而是由个人的能力决定的。你对框架理解得透彻,到哪儿都是金子。学了某框架,并不代表你以后只会做这个框架。如果公司突然要求你换个框架换个语言去开发产品时,你要想的是如何尽快学习并熟悉新的工具。所以自学的效率也和平时编程的思想有很大的关系的。
好,不多说废话。我就把以前学习MFC时的资源以及个人经验分享给大家吧。
提示:本文整理的所有资源仅供学习交流,请勿用于商途。若本文提供非原创的部分资源进行分享的行为涉及到侵权,原作者可联系楼主,楼主会第一时间删除掉该资源。
更新观点(2024.11.6 下午7:40):
写这篇文章至今,我也已经工作有五年多了吧。之前所写下的原观点,其实也没什么不对的地方,只是个人看法比较局限。所以现在刷新一下我对MFC的一些观点,以免把你们坑坏了。在这些年里,我使用过 C# 语言写过 WPF、UWP、WinForm 项目,也使用过 C++ 写过 MFC、Duilib、QT 的项目,甚至一些其他框架也有所涉猎。
在学习方面,学好 MFC 后也仍旧不会影响以后学习其他框架的进度(不会觉得自己是从零开始打基础的),因为他们在代码逻辑上的实现思路大同小异。可如果是为了以后能够快速进入程序员搬砖的这个行业,建议还是首要选择自己想要从事方向涉及到的框架和技术。例如,我想从事 WPF 相关的工作,那就直接学习 WPF 就更贴近以后的工作内容了。这样找工作时,面试官也会直接考察 WPF 相关的知识点,以及平常在写 WPF 项目时会遇到什么坑。会省下不少事情。
MFC 已经很老了,现在用的人很少,现在这个时代又是想催促你尽快融入工作当中的状态,所以工作需要什么就应当首先要学习什么。如果说,在学校的课程主要还是 MFC 写的,建议不用花太多时间去学习 MFC,平常作业将就着用就行了,要花更多的时间研究面向对象、链接库等等这些知识点。如果使用的是 C++ ,尽可能还是往 QT 方向去走,以做好将来工作的准备。而且,QT 的就业方向比 MFC 广。
目前 QT 已经发展到了 QT6 版本了,比过去丰富了不少功能。再着就是 MFC 有局限性,永远要依赖 Windows 环境开发。如果继续深究 MFC,你就错过了学习 linux 跨平台编程的机会。
还是那句话,永远不要在界面上下很大的功夫,而是要把通用的技能打好基础。(通用的技能包括调试排查问题的习惯,代码结构的优化方式等等,但不仅限于熟悉面向对象、链接库等知识点。)
这些年做的文章,也复述其他文献的内容,也有自己一字一句敲下来的,会有些零乱。所以以后可能很少再更新文章了,也算是给了我成长为还不算差的程序员的一个学习平台吧。
MFC知识点汇总
学习MFC网站
1.新兴网络(源码下载网):http://www.newxing.com/Code/VC/
2.鸡啄米入门教程(文章):http://www.jizhuomi.com/software/257.html
3.源码素材网(VC++栏源码下载网):http://www.codesc.net/source/list_8_1.shtml
4.网站源码下载中心(VC++栏源码下载): http://code.knowsky.com/down.asp?typeid=9
5.源码天空(VC++源码):http://www.codesky.cc/vc/
学习MFC教学视频
1.《孙鑫VC++20集全》高清版(迅雷下载):https://www.ed2000.com/ShowFile/91140.html
2.《孙鑫VC++20集全》高清版(在线观看):
https://www.bilibili.com/video/av598667?from=search&seid=15534039511500541814
目前很多初学者接触较多的是孙鑫教学视频。孙鑫老师授课很不错,只不过讲课比较慢。若听课感觉比较耗时间,楼主可以强烈推荐他的书籍,该书内容其实和教课视频的内容基本一致,书籍推荐在下文的百度网盘中有《VC++深入详解》电子书版。当然楼主还看了其他的教学视频还是挺不错的,比如吕鑫MFC教学视频。不过楼主建议初学者只看一套视频就足矣。
学习MFC书籍
1.VS2010之MFC入门到精通教程(pdf,鸡啄米):https://down.51cto.com/data/762394
2.VC++深入详解(pdf,孙鑫书籍,楼主对其整理了书签):此书和孙鑫VC++教学视频配套使用,两者内容描述基本一致。
3.孙鑫VC++视频教程(1-20课全)PPT讲义和源代码:(建议初学者不要下载,因为提供源代码不适合初学者学习,编程得要自己敲才有意思)
4.孙鑫VC视频学习笔记:(估计这个资源也没啥用,了解知识大纲也挺不错的)
5.MFC深入浅出(侯俊杰著):(这个适合MFC刚入门的学习者,以源码例子对MFC原理进行剖析)
6.MFC深入浅出(李久进):(适合初学者,较容易理解,适合补充基础知识。但如果刚接触MFC不久,还是推荐孙鑫的)
MFC程序原理
1.程序内部机制(上)(文章):https://blog.youkuaiyun.com/chen1083376511/article/details/89970499
2.Window程序内部机制(下)(文章):https://blog.youkuaiyun.com/chen1083376511/article/details/89971015
3.深入了解MFC中的文挡视结构(pdf):https://down.51cto.com/data/644893
++按钮控件自绘
1.MFC一张图显示按钮的三种状态(悬浮、按下、初始)(文章与源码):
(1)https://blog.youkuaiyun.com/chen1083376511/article/details/89886169
(2)https://blog.youkuaiyun.com/chen1083376511/article/details/73348931
2.MFC三张图分别显示按钮的三种状态(文章与源码):
(1) https://blog.youkuaiyun.com/chen1083376511/article/details/89949736
(2) https://blog.youkuaiyun.com/chen1083376511/article/details/73321840
3.MFC自定义按钮类,实现不同颜色分别显示三种状态(文章与源码):
https://blog.youkuaiyun.com/chen1083376511/article/details/89885320
界面综合:
1.VC界面类编程技巧大全附源码(DOC):https://down.51cto.com/data/140325
综合:
1.Visual C++编程技巧精选500例(pdf): https://down.51cto.com/data/642942
2.学习VC++的一些小实例(界面、游戏、简单图形处理、算法、数据库操作)(源码示例):http://www.newxing.com/Code/VC/Network/3676.html
学习的步骤:
1.对某框架的语言要有些基础。至少要懂得面向对象的封装、继承、多态的知识。
2.先找一套视频或者入门书籍进行学习
3.编程入门之后,再找一本只讲原理的书看看(MFC深入浅出(侯俊杰著)、《深度探索C++对象模型》)
4.近期针对性的对某些技术进行学习。比如网络编程、多线程技术、动态链接库、数据库编程等。(这些技术在其他框架实现的原理很相似,也使用得多。所以要着重学习这一块)
5.有空也翻翻《windows核心编程》这本书,因为这本书讲了很多windows系统底层的基础知识。
建议:
1.初学时,要先解决怎么做,再想想为什么这样做。
2.不要过多复制粘贴别人的代码,要抄也要亲手敲下来,这样才有提高学习效率。
3.不要太迷恋界面开发。
4.学习MFC的文章在网上有很多都是以前技术大佬做MFC时留下来的。
5.会做程序不等于你掌握了MFC。
由于写文时间有限,在此干脆分享出我网盘上存留下来的资源吧。
百度云网盘:
链接:https://pan.baidu.com/s/1n0akO6oP3s_PVR7vSHHi9A
提取码:kta0
都十点了哈,整理了一个多小时,该要睡觉了,晚安!