相关文章推荐
好帅的米饭  ·  如何计算Spring ...·  1 年前    · 
没有腹肌的海豚  ·  Http timeout in ...·  1 年前    · 

FreeWick

http://bbs.csdn.net/topics/391817496

完全没想到10多年后还有人纠结要不要学MFC,我花点时间给新人们一个总结。

第1种观点 学习完MFC,你会更理解编程的思想,再学别的语言就更快了。

话说小白要去美国学技术,大黑劝他说:“你为什么不先到朝鲜,然后从朝鲜再飞到美国”,小白茫然不解。大黑接着说“你想你先到朝鲜再去美国,不是比从中国直接去美国近吗?”小白恍然大悟,“并且你到了朝鲜,那里有金太阳的照耀,你会更明白技术的思想。后面再学任何技术都很快。”于是小白去了朝鲜,然后他才知道原来朝鲜才是最好的地方,他给大黑打了长途电话,大黑问:“你感觉怎么样?”小白激动的说“我在学习用小刀刻芯片呢,听说美国都是动动按钮,学不到真正的东西。”

有的人要说“你看我就是先学了三年MFC,再学别的语言一样很快”,是,你要是先学三年JAVA或C#,再学别的语言会更快。你学三年MFC不是去跟零相比,是跟学三年其它语言比。在经济学上这叫机会成本,曼昆“你在面临选择的时候,要考虑的是机会成本”。

第2种观点 MFC接近于系统的底层,适合系统级的开发,学习他更能理解操作系统。

MFC能直接调用C,别的语言不能直接调用C吗?那.Net Interop是干什么的?醒醒吧!别说C,连MFC的DLL都有办法调用呢。
你真的觉得学习CDocument, CView, CWnd, CFrameWnd。。。这些绕来绕去的东西会更理解Windows?要更深的理解Windows要学习Win32编程,学习Windows核心编程,不是那个MFC,再说WinRT比Win32要好用的多。


第3种观点 MFC开发的程序运行效率高
MFC主要用来开发客户端程序,这里应该是跟C#对比,C#以前是托管程序,现在C#开发的Windows程序已经能编译成native了,运行效率提高了1.6倍左右吧,MFC是沉舟侧畔千帆过,船舱里的人还以为在乘风破浪。对了,visual studio的界面是用什么开发的呢?

还有一些观点,像什么刀呀剑呀,还有什么“你MFC用不好,也用不好C#”,就不一一列举了。很多时候辩证法就是粗看去很有哲理,实际毫无实际的指导意义。

为什么还有一些人推荐MFC?

话清末要废除科举制度,进京赶考的举子跪在外面绝食抗议,朝堂之上还有大臣坚持科举有多么好。是啊,你想这些老秀才学习四书五经学了半辈子,一下子又不考了,多少年的心血白费了。考物理,化学,代数,几乎给他们判了死刑。对于一个多年学习MFC,又不会别的语言的人,基本上也是深度套牢了。我记得冰河世纪里有一只老刺猬,洪水要来了,他躲在洞里不走“I was born in this hole and I'll die in this hole.”坚持是一种品质,顽固和守旧却是另外一回事了。这对于新手来说是一个很好的教训。


为什么还有很多刚毕业的大学生学习MFC?
因为他们的老师是上面所说的那些人。

MFC总有适合用的地方吧?
有,适合用在上世纪90年代开发Windows客户端程序。

MFC现在一点用都没有了吗?
不是,历史上遗留下来一些MFC的源代码需要维护。可能偶尔会用几个开源项目,就像弹药不够的时候偶尔也拼一下刺刀。

MFC应该跟什么语言比较?
Borland C++,VB6,Delphi,PB等。

什么人还需要关心一下MFC?
IT历史学家需要大写特写MFC曾经短暂的辉煌,考古学家需要考证这块化石的时候。

++++++++++++++++++++++++++++++++++++++++

引用 1 楼 zhusg 的回复:
感觉楼主对MFC有偏见似的,每门语言都有他的特长、特色,都有用武之地,不过新人不学也罢,自己对什么有兴趣就学吧。不是有句话说精一通百吗?

对MFC没有偏见,MFC的特色是相对于OWL,VCL,VB6等,他的用武之地已经是过去式。请问这里有“精一通百”的大侠吗?我一直不解所谓的“通”是什么状态?是if for这级别的“通”,还是“拖拉控件”这种级别?某些在MFC井里的居民坚信学C#就是学习拖拉控件,今天我路过MFC的井口,只想真心的说一句外面的天空比有些人想像的要大的多。人才市场不会因为你精通MFC,就想当然的认为你也能精通Java,C#,Javascript。开发工具,类库,框架,开源,开发经验这些都需要日日夜夜的磨炼。我们要的是能形成真正的战斗力,而不是纸上谈兵。

++++++++++++++++++++++++++++++++++++++++

引用 23 楼 lx624909677 的回复:
楼主对MFC了解这么多,就是为了总结下新人不要学习MFC的帖子呀


非也,非也,十年前我也是MFCer,说起来也是同道中人。那时候也来CSDN的MFC版块,也有CodeGuru等,弹指一挥间,已经十年没来过了。当时微软正在大力推C#,我也非常恼火,TMD怎么不发展MFC?要知道我们学的每一门技术就是我们的股票,时间就是我们的资金,投入的时间越长,这支股票的仓位就越高。这支股票的基本面,得看所在的企业对该技术的投资力度。看看visual studio 2015吧,可能会有人说太浮躁了,还是用visual studio 6.0最踏实。

++++++++++++++++++++++++++++++++++++++++

引用 29 楼 FreeWick 的回复:
Quote: 引用 21 楼 shuo101 的回复:
新手想学MFC的,可是一直不能理解。
现学 Win32 ,可一旦遇到问题,都没什么地方问。
只好请教MFC大神。(今天提问,明天才能到看答案)。
要么搜类似的问题,看别人的回答或代码(基本都是MFC的)。
回答的好自己也就能解决。
要是代码就只能代码中的API拿出来再在MSDN中查有没有一样的,然后套用。Win32这条路也不好走啊!MFC有人教,有视频,有资料,多好。
楼主说的WinRT我百度了下,系统普及了吗?
楼主推荐一条明路给我。

你们单位是研发是研发系统软件的吗?为什么你这么吃力还要学Win32?学习编程是一个循序渐进的过程,步步为营吧。关于WinRT,简单来说,win32的学习曲线太陡峭了,所以就有了简单易用的WinRT。你可以安装上visual studio 2015试一下


mfc coder路过,  目前转行了。

作为微软的粉丝,除了情怀之外, 只能说一句:微软的技术很难值钱。

投怀谷歌,苹果的怀抱吧。

钱不赚,有的人是去赚。

+++++++++++++++++++++++++++++++

引用 31 楼 FreeWick 的回复:
Quote: 引用 23 楼 lx624909677 的回复:
楼主对MFC了解这么多,就是为了总结下新人不要学习MFC的帖子呀

非也,非也,十年前我也是MFCer,说起来也是同道中人。那时候也来CSDN的MFC版块,也有CodeGuru等,弹指一挥间,已经十年没来过了。当时微软正在大力推C#,我也非常恼火,TMD怎么不发展MFC?要知道我们学的每一门技术就是我们的股票,时间就是我们的资金,投入的时间越长,这支股票的仓位就越高。这支股票的基本面,得看所在的企业对该技术的投资力度。看看visual studio 2015吧,可能会有人说太浮躁了,还是用visual studio 6.0最踏实。

做一个同样的产品,使用VC6开发要2天的话,用VS2015一定是比2天更短的时间,如果你是老板,你会要求你的员工使用什么编译器,现在MFC确实使用人数不如十年前,但是十年前没有智能手机,没有物联网,MFC彻底没落了的话,论坛的这个版块为何还会每天有这么多问题呀,在招聘网站以MFC为关键字搜索职位,依然还有N多职位。

+++++++++++++++++++++++++++++++++++++++

现阶段,MFC更多的是学习一种编程思想吧。就实际使用场景而言,并不多了。现在Windows下主流的应用,比较少有是采用MFC编写的,一些比较华丽的更是毫无疑问的使用WPF等等新的解决方案。

+++++++++++++++++++++++++++++++++++++++

MFC就是微软一个框架类   跟QT、WTL基本就是同类产品
唯一区别就是MFC没有维护,没有创新了,而QT挂着跨平台的称号(也就是外层统一API,如果linux则调用linux的API,微软的就调用微软的系统API)
小白也好,大神也好。认为当前项目有必要使用MFC就用
你想让小白直接用系统API写代码,也可以啊,一个main函数,然后创建窗口,创建按钮等等等
我不知道你喷MFC有什么意义?你喷MFC,跟你喷QT有区别?QT我可以说,他就是另一个MFC,唯一就是跨平台
如果微软再升级一次MFC,封装一下linux的API跟windows的API,秒你QT分分钟
我入门的时候,就是看的MFC,因为MFC简单易懂,我不需要关心系统API,我只需要调用MFC的API就能实现我的功能
通过MFC,再去玩WTL、纯API开发,就简单多了,这是我的经历,我不知道其他人是什么情况。
但是你喷MFC是毫无意义的事情。。。

++++++++++++++++++++++++++++++++++++++++

引用 42 楼 gam2046 的回复:
现阶段,MFC更多的是学习一种编程思想吧。就实际使用场景而言,并不多了。现在Windows下主流的应用,比较少有是采用MFC编写的,一些比较华丽的更是毫无疑问的使用WPF等等新的解决方案。


MFC最大的困境就是在windows上,跟php,java什么的八杆子都打不着。关键就在于它是Windows上被淘汰的技术,大家都抱怨微软的技术老是变来变去,其实从2006年之后,微软的技术发展还是很持续的。从表面上看WPF,silverliht,WP7,wp8,Windows 8,WinRT,Windows 10看起来变来变去的,其实只是物理的不同,对程序员来说逻辑上都是一样的,学习的成本大为降低。XAML是统一所有客户端的界面技术,对了,还包括XBOX等等,未来的发展XAML非常有可能会跨平台。就算WPF淘汰了,Windows 10通用程序仍然是基于XAML的。所以选择编程技术首先要考虑的是根本方向。我不否认大家对MFC的爱,[此刻应该有歌声,微软唱背叛情歌]“如果你的爱总是逆向行驶,你说你爱我,我怎么能听得下去。”

++++++++++++++++++++++++++++++++++++++++

gz_qmc

我也讲个故事

话说小白和小黑要去挣钱,挣钱就得先学技术吧。
小白觉得:学技术就要学最先进的技术,于是买掉祖屋凑齐10万学费,到了美国
小黑觉得:实践才最好的学习,于是就地打工生活

小白学了一身的本领,进了一家跨国公司,公司一个肥皂包装线有问题,总有漏装的空盒
小白设计了一台价值20W的机器人负责剔除空盒,合格率99.99%

小黑啥也没学到,进了一家民营小企业,公司同样是肥皂包装线有问题,总有漏装的空盒
小黑跟老板商量买了一台100块钱的风扇装在生产线旁吹,合格率100%

20年后,小白攒下100W美金,准备回乡光宗耀祖
结果发现他买掉的祖屋,现在耸立着一栋大厦,价值几个亿
20年后,小黑因为替老板解决了很多问题得到赏识,公司壮大后开始搞房地产
小黑就是那栋大厦的主人

这个故事告诉我们几个道理:
1、真的技术是解决问题才算先进,价值是不等同价格的
2、支撑你发财的是对社会的认知,加上经营和运气,和技术卵的关系都没有
3、故事都是人瞎鸡巴编的,漏洞百出的逻辑也是可以忽悠人的
4、MFC有没有意义,完全是用他的人有没有因他得到职位和钱。其他理由都是吹牛B
5、再鸡巴能吹的,也没见把汇编吹没了
6、可笑的是今天吹MFC过时的,大多就是昨天放弃TC,BC,抢着拥护VC抢着拥护MFC的
7、高手手中是没有剑的,是铜剑好还是铁剑好的人根本就还没入剑道。

++++++++++++++++++++++++++++++++++++

引用 51 楼 ax5491 的回复:
别说这个问题了。各人有个人的追求。

有人追求学技术找雇佣的饭碗。这样的情况当然是跟随职场的技术需求,没有最好,只有最被需要的。

如果你想钻核心技术,寻求自主创新,开拓自己的天下,注册自己的软件产权。坚持win32 api编程甚至用汇编才是正途。


编程语言,框架,工具等之研发团队就像武器之军队,原子弹的出现并没有淘汰掉冲锋枪,甚至古老的匕首也存在着不可替代的作用,这是武器的生存空间问题。如果从整个作战系统的全局来考虑每一类武器的生存空间,重骑兵,投石车,被淘汰也就在情理之中了。MFC就像投石车,即使发明它的企业也早就不做任何改进了,而远程投射系已经经历了大炮,火箭炮,进而向弹道导弹的方向推进,它未来的生存空间在哪里?

不管是win32还是汇编,当然还有一些别的技术,都有它适用的范围,一个好的工程师应该把它们用在合适的地方。“只有它才是正途”这容易导致本位主义的错误,站在系统的全局来考虑每一项技术的定位才是正途。

当然,理不辨不明,在此感谢所有参与的朋友。。。言语不当的地方也请多加谅解

+++++++++++++++++++++++++++++++++

MFC胜在简单、通用、稳定,它还是有自己的市场的,一些偏硬件的公司通常用它做上位机软件(当然也有选择用C#的),这些软件完全不需要花哨的界面,只关注功能的实现,MFC是非常好的选择,需要的维护人员也少。

无论MFC也好,WTL也好,WPF也好,QT也好,都是工具,各有自己的特点,谁熟练就用谁,不过,论学习成本,我还是觉得MFC是最容易掌握的

+++++++++++++++++++++++++++++++++

gz_qmc

引用 56 楼 xf_21 的回复:
又不是只能学一个东西,可以同时学好几种技术呀。还是按照项目需要求吧,那个顺手,那个效率高,那个好维护,那个开发时间短,就用那个。

某项技术好不好我这种菜鸟没发言权,但C#之类的东西运行慢是真的,能感觉得到,而且还得一大堆库的支持,烦得很。
QT也慢,不知道怎么回事。


你描述的东西虽然只是表象
却已经实实在在的体现了本质

C语言是最基本的

C#和QT都是别人开发出来的软件,谈不上语言,就是个软件而已
你说你学C吧,不立志编软件给别人用,却堕落到依赖别人的软件

写C#那人的水平怎么样,你用起来的感受就怎么样
写QT那人的水平怎么样,你用起来的感受就怎么样

为啥不自己写一个呢?

有2B肯定又说了,人家那是很多人共同花很长时间做的,那有那么简单
哥就想问,10000万个SB的智慧叠加,真的比一个明白人强吗?

孙悟空当上美猴王
不是那水帘有多难,而是够胆。
大多数人自己先吓唬自己
因为无知,就把简单的东西描述的很高难
并告诉后来人,真的很难,以此来显示自己懂一点点是多么的了不起
而更多的2B被忽悠的就信了,微软就是最大的忽悠

今天说MFC过时的
哥笑话你们不是因为MFC怎么好
而是因为你们的智商从一开始就定格了。

++++++++++++++++++++++++++++++++++++++++

gz_qmc

引用 58 楼 redui 的回复:
MFC胜在简单、通用、稳定,它还是有自己的市场的,一些偏硬件的公司通常用它做上位机软件(当然也有选择用C#的),这些软件完全不需要花哨的界面,只关注功能的实现,MFC是非常好的选择,需要的维护人员也少。

无论MFC也好,WTL也好,WPF也好,QT也好,都是工具,各有自己的特点,谁熟练就用谁,不过,论学习成本,我还是觉得MFC是最容易掌握的


你说的很对,功能是第一要素,
你说的MFC唯一的缺点是做“花哨”的界面难
其实,这是误解,花哨之和图片处理有关系,MFC贴图很简单
我真可以王婆买瓜一次,MFC做的,求打脸



MFC做的,求鄙视

自从学会双缓冲
摆弄界面好轻松
信手拈来一坨屎
够你吃到天地通

+++++++++++++++++++++++++++++++++++++++++

楼主回复上面一楼:


什么叫”只关注功能的实现“?Visual C++前面的那个Visual指的是可视化界面编程,是本质特点,而MFC就是界面编程的基础类库。界面编程就是MFC编程的主战场,逃离了界面战场它什么都不是。MFC的简单易用只是相对于Windows API的,因为它是对Windows API的封装,它的快只是相当于在没有飞机之前的时代,蒙古的骑兵的那种快。

你在这展示的恰恰是MFC的局限性,当然这首先是GDI的局限性,花哨的界面都是靠贴图,切换图片。图片都是静态的,是死的,如果你用图片表示一个电池,还要设计多个图片表示电池的不同状态,比如说电量报警的情况。如果还要根据电量的数值来绘制电量的饱满程度,就只能用自定义控件了。界面设计师只能用PS来设计,设计出来程序员还不一定能开发出来。
另外,15年的发展,显卡已经从一个黄脸婆发展成一个亭亭玉立,芳龄二八的美少女了,而MFC从一个壮小伙子逐渐发展成82高龄的老翁。无论她有多少炫丽夺目的功能和性能,他已经再也驱动不了了,只能多买一此衣服让切换。如果说他们仍然深爱着对方,不得不说是思想层面的事了,哦,“思想”真是个好词,有什么事说不通,就可以说成是“思想“上的事。

+++++++++++++++++++++++++++++++++++++++++

引用 56 楼 xf_21 的回复:
又不是只能学一个东西,可以同时学好几种技术呀。还是按照项目需要求吧,那个顺手,那个效率高,那个好维护,那个开发时间短,就用那个。

某项技术好不好我这种菜鸟没发言权,但C#之类的东西运行慢是真的,能感觉得到,而且还得一大堆库的支持,烦得很。
QT也慢,不知道怎么回事。


说得很对,那你说说哪个效率高,哪个好维护,哪个开发时间短?
我也见过C#运行慢的情况,有的人就是用WinForms拖拖控件,WinForms是基于GDI+的,比GDI本来就强不了多少,并且WinForms还是managed。并且还有很多人,不求深入,开发界面就会用DevExpress拖控件,换皮肤,DevExpress那个东西慢的要命。

+++++++++++++++++++++++++++++++++++

hbs_biscuit:

工具而已 ,有必要提到这样的高度吗 ,

什么样的项目,评估下 用什么工具最适合就可以了

我现在 桌面小工具,后台小服务什么的用 MFC 或者 ATL ,界面什么的 用 JS , 大并发什么的用 J2EE 或者erlang。

服务程序的插件用 python或者 lua 。

空闲的时候 整理一下自己的知识脉络 ,知道写什么样的东西 用什么工具最趁手就好了 。

+++++++++++++++++++++++++++++++++++

gz_qmc:

MFC精华是啥?框架
最后你不用他的框架,你以为你脱离了他的思想范畴???
生活中很多人不懂理财
最后就对社会有很多看法
看到和自己拿同样多工资的人活的好就想不开

MFC也是一样,凡是只想别人做好现成的
最后连个简单的控件也做不出来
然后换C#也不如意
然后换QT也不如意
换啥都一个样

换个方向思考,有其C#和QT这些新东西能做到,MFC做不到的吗?
你们喜欢新玩意,等哥高兴的时候把自己体系的MFC做的这些东西起个名字,叫XB++
估计又一堆人蜂拥而至
显卡,无非就是显存大了一点而已
你觉得显卡发展很大是凭感觉而已
就像男人胡生殖器,觉得舒服只是凭感觉认为它进步了
其实就是充血涨大而已
一旦受者松驰了,就可以认为他落后了

本来吧,一个完美的程序,根本要不了多大的空间
就是一味的用现成,2K的代码非要要用2G的代码来完成
最后美其名曰科技进步了,空间有的是
编写的代码卡了,就怪显卡太低级,内存太小
你以为显卡内存真的有很高级的技术??超越人类的思考??
无非就是加大容量而已,
呵呵
技术又进步了

哥能告诉你哥本人的一半左右的WIN32位的代码都是TC2.0写的?
你们用MFC写不了安卓系统的软件,是你们功力不够好吗?
EXE文件和JPG文件一样都是数据,只是解释他们软件不一样而已
哥能告诉你操作系统也只是个大一点的软件??
哥能告诉你UNIX也是C写的?

+++++++++++++++++++++++++++++++++++++

从未放弃过MFC

现在掌握两种语言:C#与MFC
个人认为两种各有特色,对同一个工程:
C#:开发周期短,UI及各类控件五花八门,简单易用
MFC:开发周期长,UI不好建立(虽然有bcg之类的),但效率比较高

目前没有放弃的原因,是现阶段主要进行视觉类程序开发,工业级方面的应用,效率非常重要,公司的一
个产品,进行视觉检测,C#执行120ms,C++下只要60-70ms

另外还是习惯MFC下的代码编写,C#里面写个跨线程,更新用户UI之类的,用委托,麻烦的要死

+++++++++++++++++++++++++++++++++++++

所谓MFC思想(一)

好多人都强调学MFC关键是它的思想,好,我就把它从思想的火锅里捞上来,用手术刀剖开让大家看看它混乱的思想。从面向对象来看,界面类的内聚性很差,ID_,IDC_保存在Resource.h里,界面元素,布局等都保存在rc文件里,一个界面类的代码不能从根本上独立,这样所有的界面类自然而然的产生了耦合,这直接导致编码工作难以单元化,而这是根本性缺陷,必然给所有工作增加不必要的复杂度。比如集成工作要手工处理Resource.h,RC文件等,当然还有不同类库之间宏定义,WM_的冲突等等。比如配置管理工作,配置项识别就纠结不清,必然导致分支与合并额外的重复手工劳动,而手工劳动最容易引进新的错误。单元测试就更不用说了,MFC基本上处于软件开发的手工作坊阶段。这就是MFC过人的思想?不过,从另一个角度,MFC作为反面的教材有值得深思的地方。

++++++++++++++++++++++++++++++++++++

其实,你们都没看懂我的意思

我理解楼主的意思,就是要学就直接QT
而我的意思,不是MFC有没有用

而是N多年前,我就知道MFC就那么回事情
没用MFC之前,哥用C语言挣饭吃,舒服得很
用了MFC之后,哥既不觉得差,也不觉得好,编辑方便了一些而已
但哥用MFC,做漂亮界面分分钟搞定,以为他不好做界面不是正当理由

今天谈QT等其他软件,和N年前哥对MFC的感觉一样,也就那么回事情
N年后QT对各位新学来说,也就那么会事情

哥是想说,基础掌握好,啥都不会过时
基础掌握不好,就要看市场脸色,成了别人的牺牲品
MFC,QT,C#统统就是一个编辑器,根本没有过不过时的说法
数据结构+算法才是王道。

我就用notebook 和tLINK.exe,make.EXE 就可以混饭吃,你们信吗?
数据库,数据交换等数据结构设计好了,界面就椒小儿科

所有的这些玩意所谓的流行与加强都只围绕界面
数据结构这种灵魂性的存在你换啥软件都没有用的。
而抛开灵魂光谈界面的话,这些玩意做的界面依然是小儿科

+++++++++++++++++++++++++++++++++

引用 88 楼 a63489681 的回复:
请问现在的QQ、迅雷之类的软件是什么写的

QQ的界面库是GF,迅雷的是BOLT,都是自己的界面库而不是MFC。认识一个在tx做了10年客户端的大牛,放弃了组长的职位转职到后台发展去了。。

+++++++++++++++++++++++++++++++++

其实,或许我们和楼主的思维方式不一样

如果我拿到一个项目
最先考虑的就是数据库的设计
然后考虑的是通讯和数据交换的问题

然后才在这基础上确定界面框架
因此界面的布局数据结构设计之初基本就和数据库的数据结构绑定了

于是,不论是用啥环境,只要提供画图功能
界面基本就是用数据库里的数据画图而已,而且也就一两条语句的循环就全搞定

因此,拖控件这种事情,一点帮助都没有
比如做一款CAD出来,绝大部分的键盘鼠标消息都和图形数据结构有关系
你能在众多的图形中响应鼠标消息选取一个对象,
按钮或菜单等何尝有不是一样的呢
而你拖控件承载按钮,就要多一个窗口的概念,窗口切换,窗口布局,消息交换等就是个累赘
就好比你和你女朋友亲嘴,非要用个中间人来传递一下,很恶心

比方说我要实现以鼠标点为圆心,某半径范围内,透明度渐变
再先进的框架也不会为你准备这个吧?
那么,如果说MFC过时了,是不是也可以说QT过时了呢?因为50步和100步没有区别
相差那50步,你自己收集两个库就超越了

因此,选择还是放弃都是没有意义的,就学习来讲,那个能学到东西,那个就好
从用的角度来讲,根本都没有意义,习惯用那个就是那个好

++++++++++++++++++++++++++++++++++++++

引用 98 楼 adlay 的回复:
有那么多学了 MFC 的人在用 MFC,有那么多 MFC 开发的代码需要维护,如果不学就可能看不懂很多别人写的代码,就无法维护 MFC 开发的项目。 请问楼主这个问题怎么解决呢? 把所有用 MFC 开发的项目重新写一遍吗?
市场的很多问题其实不是由技术来决定的。技术上先进,完美并不代表市场就一定会好。

你说的对,超前的技术并一定会得到市场的认可,但我们面临的都是一些现实的技术。如果你是新手,我建议你不用管谁去维护那些MFC的遗留项目,“看不见的手”自然会安排人去维护的。
如果是必须维护MFC项目的老手,这是另一个话题,复杂的多,我简单分享一下我的经验。
1 技术体系一定要拓展,不要在MFC一种技术一路走到黑。
2 人力资源规划,大家都知道人是最重要的因素,一个组织严密的团队要避免人力资源的同质化,比如大家都会MFC一种技术,需要招募培养各有所长的技术人才。这样研发团队在整体的升级中,就能应对在设计,编码,管理,质量等多个方面的大考。
3 研发预算,投入很大的资金,需要企业领导的高度重视和支持,是长痛与短痛的问题。系统无法升级,往往是一种被动的选择,不是某一个人就愿意原地踏步。
4 长年累月下来的代码就像无法驾驭的怪兽,需要废弃或分段转换,这是一个剥茧抽丝的过程,急也没用。MFC的开源项目我们也用一些,可用的资源实在是太多了。

同样,没有银弹,也是一个艰苦的过程,但不一样的快乐,海阔天空。

++++++++++++++++++++++++++++++++++++++

我接过一个搞配方的单
一个界面要排100多个编辑框和100多个文本

好多拖控件的搞不下去了,才转给我
其实,任何界面最多就只需要一个编辑框

就只是在X个矩形框里画X个数据而已
只是鼠标点了谁的框,编辑框在谁家服务而已
不用双缓冲,直接画,界面平滑,闪都不会闪

而那个唯一编辑框,我就用MFC的改造了一下,一劳永逸
我想说,你再加100个按钮
我也就加个数据结构,然后画图的循环加且仅加1句代码完成

+++++++++++++++++++++++++++++++++++++++++

引用 110 楼 FreeWick 的回复:
所有的技术都将会过时,只要我们的观念不过时,与时俱进,该放弃的时候果断放弃。另外,我自始至终没提到QT半个字,还是被阁下敏锐的洞察力感知到了,真乃神人也。


呵呵,挖苦之意,溢于言表

++++++++++++++++++++++++++++++++++++

引用 112 楼 gz_qmc 的回复:
Quote: 引用 110 楼 FreeWick 的回复:
所有的技术都将会过时,只要我们的观念不过时,与时俱进,该放弃的时候果断放弃。另外,我自始至终没提到QT半个字,还是被阁下敏锐的洞察力感知到了,真乃神人也。

呵呵,挖苦之意,溢于言表


呵呵,我就是觉得你完全都不看别人说的什么,反正反对MFC你就反对他,拥护MFC的你就拥护他。
我欢迎批判,批判是科学的精神,那会纠正我们的错误,使我们的知识体系更完整。所谓木剑,真气,内力,那是武侠小说的浪漫主义,事实还不够力吗?我们还要引用这种虚无的论据?历史上,即使是冷兵器时代也是很看重武器的,从来没有听说过拿一树枝就把对手挑于马下。而现实中,体育,音乐等还是很讲究器具的。
我坚持批评,批评是人文精神。我们不能因为仅仅因为我们自己会MFC,就推荐新手也走同样的路,扪心自问我们的建议是否经过深思熟虑,有没有很大的偏见和自欺?
批斗是一种蒙昧,是帮派之争的小圈子文化。是走向更加落后,封闭的活动方式。新手由于知识和经验不足,面临着选择的困惑,我们要清楚这不是新秀争夺战,这是他对我们的信任。一个圈子逐渐走向衰落,终归也是信任的流失。

++++++++++++++++++++++++++++++++++++

一个人死了,是营养不良死的
你和所有的人都在讨论是吃素不吃素的问题,或者吃素还是吃肉的问题
当你说的不在本质上,你觉得别人的道理对或错,你的道理对还错还有意义吗?

凡你说MFC过时,我就批评你,这不假
并不等于我是替MFC说话
我不替MFC说话,也不等于你说的过时了是对的

我举了很多MFC的例,只是从反面驳斥你

那天你要说QT过时了,我同样用QT的例子来反驳你

因为你一开口就错了
因为一个编辑器根本不存在过时不过时的概念
你说过时了是没意义的,那些说不过时的也没意义,都是假命题

在你的逻辑里,不承认过时,就一定是拥护,何等荒唐

++++++++++++++++++++++++++++++++++++++++++

自己也算是个资深的MFC开发者了,越来越感觉MFC的没落,现在这两年也是渐渐远离MFC相关的开发项目,做点其他的。
楼主说的很对,建议新人不要深入学习了,不是MFC要被淘汰了,而是现在开发的主流趋势是多终端的,主要集中在移动端和服务端,所以只做桌面程序的市场是越来越小了。

++++++++++++++++++++++++++++++++++++++

回复楼主,我从1997年使用MFC编程,到现在已经18年了,可是从来没觉得它落后了,关键是我这18年来只编写一个软件这个软件长度已经接近100万行C++代码了,里面自己建立数据库系统、自己建立编译器、自己建立人机界面开发平台等等,我现在用一个小时的时间开发的功能,估计你用C#、Java等语言一周都做不出来。

我现在上班基本没人管,工资应该还行吧,每天就花一点时间编编程序,怎么编写程序自己定,怎么做都可以,你说MFC落后吗?关键是你采用MFC编写什么程序?比如:你给我编写一个桥梁载荷计算的程序,你是用什么编写好呢?要么你用MFC编写,或者你用MFC开发的平台软件ANSYS等来做,你还指望采用C#,Java能开发出来吗?????

MFC适合于开发复杂的二次应用平台,定位是比较高端的,简单点说,你如果要想开发一个类似EXCEL,浏览器等平台软件的程序,你这时候只能用MFC了,而且你编写完成后,你10年内都不容易落后!!!!!

++++++++++++++++++++++++++++++++++++++

是的,新人就是一张白纸,无论是从web,还是移动APP入手,都有着不错的前景,不像MFC之类的单机程序前景黯淡。对于已经用了很多年的老手,就是另外一回事了,我理解你说的那种状态,温水很舒服,不过要警惕水温的缓慢升高,别跑都来不及。桥梁载荷计算跟MFC有关吗?耦合太高了吧?顶多跟C/C++有关,C语言自有用武之地,这个没有争议,现在有争议的是MFC。

+++++++++++++++++++++++++++++++++++++

嵌入式,wince,MFC使用中。。
桌面平台,我用c++ builder,安卓平台,我用c++ builder,IOS平台,我用c++ builder.....

在嵌入式上,由于硬件机能的限制(CPU频率低,资源紧张),用C#有时候无法完成任务,虽然WINCE 5.0,6.0及以上,都支持C#开发的.NET程序,但是运行起来,那嵌入式板子真心操不起来啊,操不起来。。。。

一个200MHZ的CPU,要串口告诉通信,要ISA采集波形,要支撑1204*768分辨率的屏幕显示,画图,这时候除了MFC,我想不到另一个在开发效率,维护成本,运行速度上能平衡的方案了。当然,你要是不考虑开发周期,直接上C语言,汇编什么的,就当我没说。。

+++++++++++++++++++++++++++++++++++++

老的板子还会在wince上继续做下去,与MFC算是相濡以沫吧,关键是wince也不发展了,不管是嵌入式,还是桌面,还是其它,全都统一成windows 10了。我们也看到, 跟MFC同一个时代的c++ builder转型初步成功了 ,不过我们也有一丝担忧,在开发语言、框架和工具纷纷走向开源和免费的路上,未来c++ builder的商业模式还能走多远?即使历史上,MFC跟VCL比也差多了,只不过MFC挂在微软的旗下而已。

++++++++++++++++++++++++++++++++++++++++

我也不赞成学习mfc了!初学者不适合用mfc入门!(当然mfc有优势,就是多年沉淀下来的例子特多!多于现在快餐式的编程,可以拿来主义,不失为一种选择!)。建议学习win32   涉及到界面的就用qt吧!比mfc容易多了!

+++++++++++++++++++++++++++++++++++++++++

我觉得推荐学MFC的人就是故意想误人子弟(因为他自己被这个落伍的技术套牢了)。对于it行业新人,iOS、安卓、js、这些技术不去学非要学落伍的要淘汰的技术。真是蛋疼啊。我曾经也是从MFC的坑里跳出来了,尼玛现在新系统谁还用MFC啊。现在新项目都重点放在移动端、web端。尼玛学MFC还不如去学微信公众号开发。

+++++++++++++++++++++++++++++++++++++

mfc,没饭吃。新人完全没必要学习mfc,这种古董的东西了。如果是学习windows编程,应该从基本的win32开始。mfc现在完全不符合当下高要求的用户体验。win32 + html + css, direct-ui 此类技术的应用,更是让mfc更是被边缘了

+++++++++++++++++++++++++++++++++++++++++

引用 169 楼 FreeWick 的回复:
老的板子还会在wince上继续做下去,与MFC算是相濡以沫吧,关键是wince也不发展了,不管是嵌入式,还是桌面,还是其它,全都统一成windows 10了。我们也看到,跟MFC同一个时代的c++ builder转型初步成功了,不过我们也有一丝担忧,在开发语言、框架和工具纷纷走向开源和免费的路上,未来c++ builder的商业模式还能走多远?即使历史上,MFC跟VCL比也差多了,只不过MFC挂在微软的旗下而已。


这位老大,您懂不懂呀,不懂别瞎说。

WinCE不发展了吗?谁告诉你的呀。WinCE确实在6.0版本之后就不再有WinCE 7.0了,但是接它的班的是接下来的Windows Embedded Compact 7,有人把这个版本叫做“WINCE7”,其实正确的缩写应该是:WEC7。
WEC7之后的版本是 Windows Embedded Compact 2013

Windows Embedded家族中,有一个分支属于“实时操作系统”分支,即:RTOS。
过去的WinCE,以及后来的Windows Embedded Compact 7,再到后来的Windows Embedded Compact 2013,都属于这个分支。

至于你说的Windows 10,它在嵌入式领域,到目前为止,尚未完全替代Windows Embedded Compact 2013。
而Win10 for IoT,目前的应用还是在非实时领域。

看懂下面这张图:

++++++++++++++++++++++++++++++++++++++++++

恩,我确实不懂,一直以为Windows CE也不发展了,嵌入式也在向Windows内核统一靠拢,多谢您的回复,图片也非常棒。 我特意是看了Windows Embedded Compact 2013,关于开发平台,微软是这样表述的:
Bridgeland表示:“该版本专注于让开发人员的工作变得更轻松。对Visual Studio2012的支持,给开发人员的工作带来了显而易见的好处,包括简化的用户界面和清晰的语法着色,包括改进的编译器、自动生成的代码片段和XAML工具等工具。”
大家看,XAML又出现了,MFC怎么连一个字母都没提?对新手来说,这又是一个很好的好例子,微软花了上万倍的心血在XAML身上,在微软技术体系的小组赛里,界面技术XAML已经比MFC遥遥领先了。你真的以为学会了MFC再学XAML会很容易,你找个VC程序员做个示范?相比较而言,如果你掌握了HTML5,或者Android的AXML,如果要学XAML反而要容易。

++++++++++++++++++++++++++++++++++++++

引用 208 楼 china_jeffery 的回复:
Quote: 引用 207 楼 china_jeffery 的回复:
离开应用场景和行业来讨论什么语言,什么框架,什么库有没有用,过没过时,是不准确的
就我所知,工业控制方面MFC运用还是非常广的


MFC应用很多,只能说明工业控制方面,MFC曾经是好的技术方案,但已经是过去式,新时期需要新的技术决案。新手应该在新的技术方案里定位自己要学的知识,而不是纠缠到历史遗留系统里。即使要做工控,难道不去学适应更多应用场景的界面技术,却非要学局限在一种应用场景的MFC?

+++++++++++++++++++++++++++++++++++++++++

引用 213 楼 FreeWick 的回复:
Quote: 引用 208 楼 china_jeffery 的回复:
Quote: 引用 207 楼 china_jeffery 的回复:
离开应用场景和行业来讨论什么语言,什么框架,什么库有没有用,过没过时,是不准确的
就我所知,工业控制方面MFC运用还是非常广的

MFC应用很多,只能说明工业控制方面,MFC曾经是好的技术方案,但已经是过去式,新时期需要新的技术决案。新手应该在新的技术方案里定位自己要学的知识,而不是纠缠到历史遗留系统里。即使要做工控,难道不去学适应更多应用场景的界面技术,却非要学局限在一种应用场景的MFC?


使用MFC并不是因为MFC好用,而是因为在要求本机代码发布的windows软件开发过程中,能使用的图形界面库寥寥无几。Delphi的本机代码版本早已不再继续开发,Qt因为过于臃肿。至于wxWidget则直接是MFC的封装。至于所谓的.Net Native,离开winRT就不能用了,更何况winRT软件只能在微软商店发布。

++++++++++++++++++++++++++++++++++++++++++

废话那么多,拿工资出来说事就好了。

学校学MFC的,到了公司基本用不上,大家都有自家UI库,MFC从来都是个烂摊子。

要理解设计模式,直接学设计模式就好;要理解windows api就学win32。

当然,有些山顶洞人程序员和公司,还在用MFC我就不知道了。

+++++++++++++++++++++++++++++++++++

30岁以前,靠投机吃饭的,岁月自然淘汰
30岁后还在的,才是有沉淀的人,40岁还在的,才可能是高手
高手得到的不仅是饭碗,而且有尊重

投机的年代,运气好就是上宾,运气不好就是狗,甚至比狗都不如,运气好的就那么万分之几的比例
30岁后回头,晚了
你拿钱说事情的,你干嘛不去炒股,干嘛不自己当老板?那不比编程来的快?
既然都是要靠技术吃饭,干嘛又总投机呢?

如今MFC这些岗位少了,简单把原因归结为MFC不适用了,是小孩思维

其实一个需要MFC的相关企业配5个程序员正好
可是一开始大家都标榜这吃香,企业的HR也是摸石头过河,于是都考虑20个
混水摸鱼投机的有很多
大家都了解之后没有那么神话了,自然要回归正常,于是岗位少了很多
但能在岗位上的绝对是真能做事的
投机的人自然就举步维艰,只好寻找另外的投机之路
要投机就要炒作,因为人少的地方无可遁形啊

很多人以为MFC就是拖控件,很多人以为拖控件就算编程。
现在的HR都聪明了
以前每月5000请10个混混
现在是每月5W请1个真人
岗位怎么能不少
是衰败还是回归,历史会有结论的

++++++++++++++++++++++++++++++++++++++

用MFC的(虽然我不用,用的是WTL),可以用擅长的C++语言, 可以方便的调用C/C++类库(系统或第3方), 可以嵌入各种脚本语言,可以方便极致的优化.
当然如果一开始就学的C#, 真的没有必要再学MFC.
当然qt作为界面开发也行, 但是这个库实在过于庞大, 和STL也没什么事了,所以我推荐如果要用, 可以用WTL开发界面, 简单的对Win32封装.而且只是界面, 其他库完全可以用stl或第3方库什么的.

很奇怪,好像学MFC都不学别的了. 搞技术还是多学点好, 原理是相通的, 设计是可以借鉴的.
Windows搞界面就选这几个,如果是C++为主要语言:
wtl,duilib,qt(qt真心不建议,qt的学习成本也不低,不过好在难逆向)

+++++++++++++++++++++++++++++++

MFC从统兵百万,雄据沃野千里的大将,到扼守险要的偏将,说节节败退也不为过吧?当然我完全理解航空系统所需要的那种稳定性,相信MFC不会消失,别说10年,20年也没问题。我们拥抱创新新和变化,尤其是瞬间把我们的心击碎的 革命性的变化,能带来生产力的急剧提高。所以MFC的变化对我们而言,简直就是杯水车薪,就算打脸也得如此。

工控领域之外的MFCer,你们怎么看?是否也有什么险要跟MFC结合?

+++++++++++++++++++++++++++++++++

引用 275 楼 FreeWick 的回复:
MFC从统兵百万,雄据沃野千里的大将,到扼守险要的偏将,说节节败退也不为过吧?当然我完全理解航空系统所需要的那种稳定性,相信MFC不会消失,别说10年,20年也没问题。我们拥抱创新新和变化,尤其是瞬间把我们的心击碎的 革命性的变化,能带来生产力的急剧提高。所以MFC的变化对我们而言,简直就是杯水车薪,就算打脸也得如此。

工控领域之外的MFCer,你们怎么看?是否也有什么险要跟MFC结合?


其实,如果我在别的帖子里说的话有幸能被你看到,你就会知道,你所推崇的XAML,我也是极其的推崇的。
我个人非常非常喜欢WPF,甚至于希望能够在Android、iOS上用到和WPF类似的技术。

MFC,说实话目前最适合它存在的土壤也就是工控领域,而我也仅仅是在工控领域用MFC,离开了工控领域,我几乎不会用到MFC。

然而工控是个大领域,可以说工控的范围很广。其实它的范围比互联网要广,只不过工控往往存在于默默无闻的地方,虽然发挥着重要的作用,却很难吸引眼球,很少引起注意,所以好像显得不存在似的。

离开了工控领域,我觉得就不要继续用MFC了吧。除非有老的系统需要维护,开发新系统的话,有大把的比MFC更合适的技术。

在工控领域MFC绝对是个主流,但离开了工控领域,MFC绝对是个极少数派,这是不争的事实。

有好多技术都只能在某个特定领域做常青藤,离开了那个特定的领域它就什么也不是。

其实在工控领域,MFC也在受到新技术的威胁。你所说的那种XAML的技术,其实在工控领域,也在涌现出类似的技术。有一种图形界面开发技术,名称我就不说了,业内的人都知道,不是业内的人知道也没用。这种技术,是用类似于XML的语法去定义一个界面,然后靠一个底层的引擎去渲染出一个界面来,而底层用的其实是OpenGL。这种界面技术运行也非常高效,非常稳定,而且在现代的飞机上,驾驶舱里面,大量采用的就是这种技术。这种图形界面技术可以移植到PC上、VxWorks操作系统、Linux系统,甚至我们公司自己写的RTOS,也移植了这种图形界面技术。

所以说MFC不会消失,但也不会再有更广的应用。

++++++++++++++++++++++++++++++++++++

引用 292 楼 gz_qmc 的回复:
对新人的忠告:在汽车流行的今天,彻底放弃步行。

直立行走虽然是人类的骄傲,但走路是原始人选择。
飞机高铁都高速发展的今天,还选择步行将没有生存空间,无人驾驶马上就会普及
BX就是不行,你们看着办,

人类将来一定会发展成只有脑袋的动物,脚没用了,手也没用了,你信不信,反正我信了

生小孩的妈妈们注意了,小孩生下来就把脚剁了
真的,我是负责人的人,将来你的小孩要从走路开始学就直接被淘汰了

混淆问题能力比较出色啊。
MFC不是一个必须,只是一个选择而已,不懂、甚至没听说过的MFC的高手实在是太多太多了。
但走路是一个必须的事情。

++++++++++++++++++++++++++++++++++++++++++++

引用 297 楼 deping_chen 的回复:
我也曾经使用MFC有十年吧。不过我现在已经放弃MFC了。对于C++程序员来说,Qt确实比MFC好用多了。更不要说Qt是支持多个平台的。新人们,MFC真的已经过时了,不必在这上面耗费时间了。


你放弃MFC,是你的选择,没有对和错
你绝得MFC不合适自己用,是你的选择,对也仅仅是针对你自己

但是你狂言MFC过时了,你就有过失,但还仅仅是失言。
而你居然借此误导新人的选择,以为你选择的就一定是阳光大道,这就有罪

别人选什么反向,有多大成就,是你的性格,你的天赋,你的眼界和你的认知可以确定的??????

有的人天性思维习惯就从MFC入手最快最简单,而且学会编程后其他东西就无师自通了
你以为这种人只是少数?????????
你以为像你们这么笨MFC弄了好多年都一知半解的人占多数???
你以为像你们这种最大能力就只能一段时期就只能靠一个编程环境吃饭的人占多数???

你天津人去北京自驾最方便,你就敢妄言广州人去北京自驾最方便?????????
你山东人吃大葱上瘾,你就敢妄言四川麻辣味不入流??????????????

哈韩哈日的非主流很多,很会抢风头,各种流行,各种嗨,各种炒,各种闹腾。
其实所谓的的多数,只是时间和镜头的相对集中而已

++++++++++++++++++++++++++++++++++++++

引用 296 楼 akirya 的回复:
又在混淆概念了
不会MFC的高手实在是太多了,不会MFC的都不是高手了么?


不知道是我混淆了,还是你在搅混水

楼主观点:MFC过时了,没落了,新人不要选择MFC了。
赞成楼主观点:
1、我觉得MFC不顺手,应该是过时了
2、我有更好的东西,感觉MFC过时了
3、MFC微软不维护了,是过时的一个象征
4、MFC岗位少了,所以应该是过时了
5、手机流行了,移动端需求增加了,所以MFC过时了

我的观点:楼主观点和赞成楼主的那些观点都是无稽之谈

1、MFC的市场大把,只是在各行各业,而唯独不在手机移动端上占优势,比起各行各业,手机算个屁
手机生产线的控制还大量的用MFC做的程序呢。
2、新人掌握那种编程技能进入这个圈子简单,和新人的性格,思维习惯,环境,从事行业等有关。关编程环境卵事。
3、MFC不维护了,就和人的脚不进化一样的。
4、所谓的流行都是商家的炒作,是最没出息的人才跟从的,不是风靡一下就成为你的饭碗。那就好比富人给乞丐派馒头
知道苹果为啥要有别于其他的操作系统吗?那是保护自己的利益,不是说他的系统很好,那只是垄断的小伎俩
你去适应他的系统学了一堆垃圾,那么苹果倒了呢?去吃屎吗?当然附带学他的东西没为啥非要放弃别的才行啊?
难道有肉吃,米饭就过时了?
5、我从来没有说MFC很牛,也没有说MFC比其他高级,也没有说MFC非选不可,我只是说其他能做的,MFC也能。

6、你看看你说的那话关讨论话题卵事。

++++++++++++++++++++++++++++++++++++++++++++++++

我来谈谈新人要考虑吃饭这个问题
这是无法回避的
那么,首先要明白一个概念
开始我们是求有饭吃,然后才求吃饱,而不是求发财
只有明白这个观点,才能考虑长远

那么,MFC怎么就没饭吃了??
有人说MFC需求少了,是站在手机移动端的角度说的
难道编程就只在手机移动端??????
中国这次洗牌之后,人工成本越来越难
那么多自动化生产线的需求是你一个小小的手机移动端能比的??????????

流行的没错,但蜂拥而至的,拍拍良心,有几个为吃饭而去的?
大多都是希望不劳而获,都是希望一夜爆发的
而这种思维根本就不会去把编程学好,因为是看钱去的,那个来的快就学那个
当然,选择流行没有错,那只是各人的选择
但你因此蛊惑新人也去跟风,甚至以诋毁一些东西铺路,这就极度不负责任

+++++++++++++++++++++++++++++++++++++++++