9

随想录(MFC开发有感)

 3 years ago
source link: https://feixiaoxing.blog.csdn.net/article/details/102982984
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

随想录(MFC开发有感)

费晓行 2019-11-09 08:16:09 339
分类专栏: 随想录

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

    虽然之前也写过一些mfc的文章,但是时间长了也会忘了。对于很多同学来说,用C#开发图形界面又快又方便。但是像我们这些从VC6.0就开始写软件的老人来讲,用MFC开发代码还是挺顺手的。今天看到MFC从VS2017版本开始,已经不是默认安装的了,心中还是有一些感慨的。

1、MFC只是WINDOWS API的封装

    开发windows图形界面程序,不用MFC也是可以的。只是用MFC比较方便而已。你可以不用敲代码、或者使用很少量的代码,就可以做出你想要的功能的。MFC创建了数百个类,这些类将API全部封装起来,从控件到定时器、多线程,事无巨细,使用起来不是特别复杂,当然前提是你比较会使用MSDN来查询信息。

2、MFC需要你精通C++

    客观来说,MFC的学习门槛还是比较高的。所有编程语言中,C++是公认比较难学的语言,特别难精通。很多人可以说精通C,但是如果自诩精通C++恐怕还是打一个问号的。C++里面的类、友元、继承、虚函数、多重继承、模板、泛化、STL、Boost等等,能学会使用就很不错了的。况且为了实现MFC功能,早期的WINDOWS工程师使用了好多的编程技巧,阅读MFC源码有一定难度的。

3、MFC的开发思路

    虽然有这样、那样的困难,但是MFC用的时间长了,你会发现MFC开发并不难。从Application、MainFrame、ChildFrame、Doc、View,整个架构是一脉相承的。即使好长时间不写MFC代码了,过一段时间重新把代码拿过来看,熟悉起来也不是很复杂。Application负责整个应用的创建,将ChildFrame、Doc、View绑定在一起,进而构建MainFrame。MainFrame负责窗体搭建、ChildFrame负责子窗体搭建,Doc负责文档搭建,View负责图形化显示,基本上就是这么分工的。

4、最新的MFC

    观察最新的MFC代码,特别是VS2015之后,你会发现多了ClassView、FileView、OutputWnd、PropertiesWnd、ViewTree这五个文件。前面4个的主要功能是在MainFrame里面添加额外的窗口显示,这也符合现在的主流界面要求,类似于eclipse界面一样。而ViewTree结构则主要是被ClassView和FileView使用。至于MainFrame、Doc、View还和之前一样,都是在App类里面被调用的。

5、使用最多的MFC类型

    相比较MutilDocument和SingleDocument,基于Dialog的MFC才是用的最多的形式。毕竟用MFC做工具还是比较方便的。如果本来就有一个命令行工具,那么只要结合一个对话框,就可以让这个工具变得很好用。相比较而言,使用MultiDocument和SingleDocument有一定的难度,文件也比较多,对程序员有一定要求,在使用场景上并不是很多。如果对MFC不是很了解,很容易写出来的代码千疮百孔,动不动程序挂掉那也不是稀奇的事情。而基于Dialog的MFC一般就三个类,CDialog、CAboutDialog、CDialogApp,使用起来不要太爽。

6、重视使用类向导

    MFC很多的代码都是自动生成的,所以大家在使用的时候一定要重视类向导这个功能。通过类向导,你可以自由添加变量、函数、处理消息、将控件转变成类成员变量等等。目前在VS2015上面,类向导的界面是这样的,

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9mZWl4aWFveGluZy5ibG9nLmNzZG4ubmV0,size_16,color_FFFFFF,t_70

7、后续的发展

    从目前的发展趋势看,.net和C#开发应该是微软重点推荐的开发模式。如果是从头研发的新软件,那么使用.net开发也无可厚非,但是如果考虑到以往MFC软件的维护、或者是编写小的工具软件,代码行数在几百到几千行之间,使用MFC开发也是不错的一个选择。当然对于那些高手来说,使用MFC开发商业软件也是可以的,比如Emule就是MFC开发的。按照WINDOWS的习惯,微软公司全部放弃MFC应该不太可能的,毕竟目前在市场上面还有那么多的存量软件,但是不推荐MFC倒是一个不争的事实。我倒觉得,学好MFC、用好MFC、并且那么多开源MFC代码,都是很好的学习资料,努力掌握一个架构也不是坏事。

8、最后的话

    不管是MFC、还是WIN32、QT,一个合格的开发者还是应该有一个自己比较擅长的框架平台。全部都使用WIN32开发或者QT开发也未尝不可,但是一定要做到了解和精通,可以独立解决所有相关的架构问题。不管什么样的框架,毕竟还是为项目负责的,一个低质量、开发进度得不到保证、不好调试的软件,总归是得不到长远发展的。

    当初为了实现,MFC充分利用c++的各种特性,包括全局构造函数、类静态变量、类静态函数、参数引用、手动链表、类函数指针等各种特性,但是抛却这些特性,其实MFC本质上还是给我们提供了一个相对简单的GUI环境,对于快速开发上位机工具还是大有裨益的。如果对这些特性不是很了解的朋友,可以参考我之前的blog,了解一下这些属性是怎么实现的。

    mfc之全局变量,https://blog.csdn.net/feixiaoxing/article/details/52751748

    mfc之类型识别,https://blog.csdn.net/feixiaoxing/article/details/52760518

    mfc之创建对象,https://blog.csdn.net/feixiaoxing/article/details/52831372

    mfc之数据保存,https://blog.csdn.net/feixiaoxing/article/details/52899947

    mfc之消息注册和消息传递,https://blog.csdn.net/feixiaoxing/article/details/53071842

    要说这里面属性比较复杂的,我觉得还是类函数指针,建议大家多多练习,比如像这样,


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK