【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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上面,类向导的界面是这样的,

7、后续的发展

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

8、最后的话

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

ps1:

当初为了实现,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

ps2:

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

#include "stdafx.h"class parent
{
public:parent() {}~parent() {}void process() { printf("parent\n"); }
};class child : public parent
{
public:child() {}~child() {}void process(){ printf("child\n"); }
};int main()
{typedef void (parent::*func)();func f = static_cast<func>(&child::process);child c;parent* p = &c;((p)->*f)();return 0;
}

随想录(MFC开发有感)相关推荐

  1. 【Visual Studio 2019】创建 MFC 桌面程序 ( 安装 MFC 开发组件 | 创建 MFC 应用 | MFC 应用窗口编辑 | 为按钮添加点击事件 | 修改按钮文字 | 打开应用 )

    文章目录 一.安装 MFC 开发组件 二.创建 MFC 应用 三.MFC 应用窗口编辑 四.为按钮添加点击事件 五.修改按钮文字 六.打开系统其它应用 七.博客源码 一.安装 MFC 开发组件 打开 ...

  2. VC用MFC开发的圆形进度条控件

    DownLoad Src VC用MFC开发的圆形进度条控件 visualsan@yahoo.cn NUAA zss 在NBA2007游戏里,还有很多科幻电影里,经常可以看到圆形进度条.有的用来显示导弹 ...

  3. 使用MFC开发ActiveX控件

    摘要: 本文对COM组件中的ActiveX控件的MFC开发方法进行了介绍,讲述了用户自定义和库存属性.方法以及事件的添加方法和属性页的制作过程.使读者能够掌握基本的MFC ActiveX开发方法. 前 ...

  4. QT开发和MFC开发的经典案例

     大家来欣赏下Qt写的程序(摘自百度百科) 3DSlicer, a free open source software for visualization and medical image co ...

  5. MFC开发——卡拉OK字幕制作

    依然是为了赶老师作业,又去学了点东西,然后做了个小项目.首先在开始做项目之前,说一下整体思路,要实现卡拉OK字幕效果,就要对文本类与定时器有一定的掌握,通过定时器的更新,可以实现字体颜色的变化,与字幕 ...

  6. VS2005下MFC开发的ActiveX控件的部分总结 inf 篇

    本博客转载CSDN网友http://blog.csdn.net/immc1979/archive/2007/04/20/1572222.aspx,本人觉得写得非常的实在,一看就是从实际经验中总结出来的 ...

  7. snap7-c++/MFC开发笔记

    snap7-c++/MFC开发笔记 书接上文,通过对python-snap7的库的研究,笔者掌握了上位机与plc通讯的基本原理与方法,然工业现场上位机的用户界面基本上是以c++为底层语言制作的,pyt ...

  8. VC,MFC开发技巧收集

    (mainmenu->GetSubMenu (0))->DeleteMenu(i,MF_BYPOSITION); break; } } 十五.改变应用程序的图标 缺 十六.另一种改变窗口标 ...

  9. MFC开发股票看盘软件碰到的问题

    MFC开发股票看盘软件碰到的问题 MFC菜鸟,想用MFC做做股票看盘软件,天天度娘后,基本能显示相关股票信息,但同时也碰到较多问题没法解决.1. 刷新屏闪,获取即时数据后,2秒刷新,都会明显的闪烁.用 ...

最新文章

  1. Linux 爱好者的飞行棋:sudo
  2. centos打显卡驱动命令_CentOS7显卡驱动问题
  3. html5发展前景-兄弟连,IT兄弟连 HTML5教程 HTML5的曲折发展过程 HTML5的诞生
  4. Linux经常使用的命令(十) - nl
  5. 【算法】螺旋方阵 上交OJ1021
  6. 关于EMF模型的操作,赶紧记下来
  7. 【自定义Android带图片和文字的ImageButton】
  8. Dom4j SAXReader Constructors
  9. rfid在高速公路管理中的应用_RFID亮灯电子标签在仓储管理中的应用
  10. Dapper.NET—轻量ORM
  11. 【数学建模】2016年全国大学生数学建模-系泊系统全面解析(附MATLAB实现部分代码)
  12. 实用干货:电放提单详解,与海运单、一般提单到底有什么区别?
  13. Pix4dmapper航测教程——全流程内业处理
  14. 当年的好记星、诺亚舟都去哪了?
  15. 相干接收机matlab仿真,基于DP-16QAM的400Gbit/s集成相干接收机关键技术研究
  16. Linux 与 Python编程2021 Python面向对象编程实训 educoder实训
  17. 【2018慢性病与信息大会】周脉耕:信息化助力基层慢病管理
  18. erp系统有哪些功能模块?
  19. Log4j简单xml配置
  20. CTF隐写常见套路归纳

热门文章

  1. 5月8日——iOS中的3D Touch效果
  2. Xftp5如何设置默认的文件夹
  3. Git教程(二)-如何上传和同步自己的git项目
  4. weblogic故障报错
  5. Linux防火墙配置入门
  6. 实现Exchange2003安全全集(下)
  7. YAML_12 批量创建用户,分别设置用户组
  8. 问:为什么python中有了全局解释器锁GIL,还要有互斥锁?
  9. ERDAS遥感图像配准、及其它一些基本处理
  10. 用谷歌浏览器来模拟手机浏览器