现在学习Microsoft Foundation Classes(MFC)是否值得?

6

我是微软技术的忠实粉丝,学习了很多像.NET Framework和C#这样的编程语言。但我认为.NET应用程序运行在.NET Framework之上,因此它们有某种缓慢。然后我听说了MFC,它是Windows开发的包装类,并且是商业应用开发的标准(我指的不是商务级别的应用程序),所以我想知道现在学习MFC是否值得?还有其他替代方案吗?我想开发商业级别的应用程序。感谢阅读我的问题。


11
如果你在使用MFC的公司工作,那么它会很有用。否则,它完全无关紧要。最好学习原始的Win32 API以及MFC / WinForms / WPF如何包装(或不包装)它。 - ta.speot.is
@ta.speot.is 感谢您的评论。不,我没有想过作为自由开发者开发商业应用程序的想法。 - unique
2
我猜@KerrekSB是在开玩笑,关于Windows8的未来。 Betamax和Laserdisc是过去两种被大肆宣传但从未起飞的技术。 - Lorenzo Donati support Ukraine
还有更多的建议吗.....? - unique
1
@unique 我来晚了,但是想指出一点:基准测试已经证明,C++并不比.NET快多少。事实上,.NET在某些数据结构上表现更快。JIT编译现在非常快。我承认WPF有点慢,但WPF真的很棒! - onefootswill
显示剩余3条评论
2个回答

15
不,我不会学习它-我会研究它,以深入了解GUI类的工作方式,这样你就可以更广泛地理解这个古老但重要的技术。但我不会将它作为创建未来新GUI的技术来学习。忘记MFC的非GUI部分,只有那些特别喜欢微软技术的人才会使用它们,其他人都使用更好的库...
虽然你可以使用它编写出色的应用程序,例如TortoiseSVN,但现在使用Winforms更容易并且能够获得相同的结果。是的,.net比本机代码慢,但对于GUI,你通常受限于人类对变化做出反应的速度,因此“慢”的系统仍然可以正常运行,除非它变得非常缓慢,以至于反应迟钝或缓慢。因此,我会跳过WPF,因为我知道自己和朋友都遇到过太多关于WPF性能的支持电话(网络上也有很多关于WPF表现相当差的内容)。
有替代方案,Qt是一个伟大的GUI工具。wxWidgets也很好,并且也是跨平台的。今天,GUI的普遍态度是它们应该基于Web,因此您最好学习ASP.NET MVC 4(而不是旧版本),因为今天似乎有很多这种技术的工作机会(明天可能就不同了!)。

2
我同意你所说的大部分内容。但我不会同意Qt是一种替代方案。因为它没有官方支持,除非你选择Digia路线,但那里没有64位版本。它往往会变得很慢,而且跨平台支持似乎使其几乎不可能实现适当的键盘导航。然后,你还需要处理平台细节问题。此外,它缺乏MFC与Windows Forms和WPF无缝集成的能力。 - IInspectable
1
Qt确实有一个64位Windows版本的构建。我已经在Windows上使用它5年以上了(使用了相当多版本的Qt)。虽然现在官方打包x64 DLL。 - drescherjm
@drescherjm 我应该表达得更清楚:Qt没有官方支持的64位版本(不支持XP/Vista和嵌入式版本)。Secondary Platforms支持包括以下声明:“在次要平台上已知的错误可能会在新版本发布之前得到纠正,也可能不会得到纠正。”我通常称之为“不受支持”。根据您的项目要求和业务规定,这会带来重大风险,并排除了使用Qt的可能性。 - IInspectable

7

仍有一些商店使用MFC代码库,无法丢弃该库,因为这是经过充分测试的项目,并且对于那些人来说,它可能很有用。但作为一个学习练习,最好从Win32编程入手,从中衍生出MFC和.NET。

根据我的经验:

  • Guerilla Games是PS3 Killzone系列游戏制造商,其中使用了MFC工具
  • 我曾就职于博世安防系统,他们仍在使用MFC
  • 飞利浦医疗仍然在使用MFC

对于新开发,他们都使用不同的技术。


3
如果你不花时间去学习,任何复杂的框架都会感觉“非常可怕”。从你的个人资料来看,似乎你也不熟悉Windows API或C++,这是理解MFC绝对必要的。我每天都在使用MFC,虽然我不能说我喜欢它,但我不得不得出结论:其他所有东西都更糟糕。 - IInspectable
2
@unique 如果你需要它,就去学习。如果不需要,就不要学。如果你在团队中工作,你会知道是否需要它。如果你是技术负责人,不应该轻易地将其丢弃为“太老”或“可怕”。迄今为止,它是唯一具有官方支持的Windows开发本地框架。 - IInspectable
1
@ThomasW 你没有学好基础知识。要想理解MFC,绝对必须对Windows API有深入的了解。你错误地认为是“seg-faults”的对话框很可能是调试断言——MFC在整个过程中使用状态检查(在Windows上没有seg-faults)。它当然不是唯一的本机框架,还有WTL或wxWidgets。但它是唯一一个得到官方支持的框架。 - IInspectable
1
@IInspectable 不是的,对话框是程序崩溃并出现内存访问冲突异常(segfault是说同样的事情的更快捷的方式)。请参见http://en.wikipedia.org/wiki/Segmentation_fault。高级框架应该简化和包装低级别的内容...如果您必须熟悉两个级别才能使用它,则没有逻辑优势或目的。不,没有状态检查——我看了MFC源代码——东西只是爆炸了。与许多其他框架相比非常差。你喝了太多的MS koolaid。 - Thomas W
2
@ThomasW 我同意你的观点,MFC并不是为了成为你最好的朋友。微软实际上表示,MFC并不旨在简化Win32 API,而是为了提供面向对象的架构。要想编写一个不会因为误解而失败的MFC程序,仍然必须理解API。更高级别的框架通常试图通过隐藏一些东西来使事情变得更容易,以便编码人员看不到正在发生的事情。整个重点在于,MFC 不会隐藏 Win32 API,因此如果你在MFC中疯狂操作,它 segfault或崩溃,这是有保证的。 - Frederik.L
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接