MFC与Win32的区别

本文探讨了MFC与Win32编程的主要区别,包括它们的特点、适用场景及优缺点。MFC作为Win32 API的封装,提供了一套类库用于简化开发过程,适合快速开发用户界面。而Win32编程则更加灵活,适用于追求底层控制的应用。

文章原址:http://blog.sina.com.cn/s/blog_7656589b01016011.html


MFC就是 微软给你包装了的库,提供了很多扩展功能,以及高级功能,这样方便你使用,而不是自己从头调用API来实现
而API由于是MFC下一层,自然实现更灵活,可以根据你的需要来使用,不会被MFC类库所限制。win32和mfc编程的最大不同是
win32
是编程者自己把消息和该消息的响应函数联系在一起。
mfc
是编程者采用微软为我们做好了MESSAGE_MAP(消息映射)机制,来处理消息。
--------------

mfc是便利的,为什么有人不用呢?
不用mfc的人群往往是从DOS时代开始从事窗口编程的人,他们早在mfc出世之前就编得一手好程序。
长期的编程过程中,每人,每个TEAM都拥有了自己的消息处理机制程序库或类库。
当然有很多人认为他的类库比mfc使用方便。他开始为窗口编程的时候,mfc的TEAM的很多人还在学校里读书呢。
--------------

如果不是从那个年代过来的人,还是用mfc吧!
mfc
是封装的类,最后还是会调用win32api 
win32api
开发效率是低一些,但比较自由. 
有时候mfc是封装的类不能满足我们的要求,这时就需要我们自己用api来开发啦 MFC是专注于用户界面的,而Windows SDK专注于UI, console,Windows服务,嵌入式,驱动多种类型的程序
MFC
是一套类库,适应范围窄,可以搞ERP软件,但效率不如其他语言高,而且类库并没有对DDK,openGL,D3D等专项领导的函数库进行封装。而Windows SDK提供了专题开发的平台。
MFC
中对所有的句柄,对象,消息都进行了严格的检测,如果你不知道它的内部机制,随便调用函数很容易出错,而SDK提供的是一种宽松的开发环境,你可以用面向对象的思想定义自己的类,对界面控件进行封装。
在一些专题开发项目,你可以不懂MFC,但是在一些常规的软件开发,你必须熟悉MFC,同时还要懂SDK. win32是windows下的最基本的编程方式,使用它得到的代码最干净最有效率,也是最底层,它是其它所有方式实现的基础。一般指只使用API和SDK。
MFC
是对win32的封装,使用win32编程方法,写了一个又一个类,让我们不用再重复大量劳动。但毕竟是封装,所以不可能完全实现win32所有功能。用着虽然方便,但距离细节毕竟远了,在个性个、特殊化方面还有差距。

两者相比,win32更本质,MFC更抽像。从软件工程来看,MFC更符合要求,更人性化。我们在正常使用中,优先使用MFC
1.MFC
的功能正常情况下可以满足绝大部分的需要,特殊需要,也可以直接用API和SDK实现。但反过来,win32下想用MFC的东西,却是非常困难的。MFC下开发,是包融了win32.
2.MFC
和vc融合,拥有大量人性化的东西,会极大增加开发效率。如界面、通用对话框等。而且它的代码是微软写的,比你自己用win32实现更值得让公司信赖。而且代码量会降低很多,更容易调试和维护。
3.
很多功能你自己实现起来非常麻烦,甚至你的技术没达到那标准,而使用MFC很简单,这会迫使你使用它。
有些场合下不要使用MFC
1.
三维游戏等,这些东东MFC并没有包含,这时需要使用其它库。使用MFC反而不好,会造成臃肿和拖累。
2.
特殊程序,如病毒等后台工具。它们根本不需要什么界面,需要的就是效率,而且要求体积小。这些无疑Win32比MFC强,甚至连win32都可以不用。
3.
简单的实现,win32上简陋的东西就够用了,或者就算不够用,但有STL等C++自带的,那么MFC就可以不需要了。win32更符合老编程员的习惯。而且如STL,同样功能下,事实上比MFC更优秀。mfc在d3d,opengl,ddk开发的弊端:
1.MFC
是一种封装类,是个宠然大物。当你使用d3d,opengl等它没有封装的进行开发时,使用它完全是种浪费,不需要它为何要挂上它呢?如编d3d时,它本身已经实现了几乎所有的需求,别再拖个油瓶。
2.MFC
不仅是一种封装类,更是封装了一种MFC编程思想。它具有特有的文档视图结构和消息影射。我们在做普通程序时,这些会给我们带来方便。但做d3d时,编程思想又回归win32,那样更直接和有效。这时MFC的编程思想和方式就不合适了。特别是DDK,那是跟底层打交道,要短小高效,跟MFC是两种不同追求风格。
3.
事无绝对,选择合适的也就是最好的,如果你在进行D3D开发时,还要使用MFC的东西也是可以的。如果不是大量使用,可以把MFC中你需要的部份扒开单独使用。 win32指系统环境,MFC是微软的一个开发平台。
楼主应该不是想了解win32与MFC的区别吧?因为MFC以前主要就是在win32环境中进行开发的,二者不是一个层面的啊。

MFC是对SDK的包装。就像一瓶酒,它就是SDK,然后给这瓶酒加上一个盒子,它就成了MFC。


### MFCWin32 工程的主要区别 #### 1. 编程模型的不同 MFC (Microsoft Foundation Classes) 是基于面向对象编程(OOP)的一种框架,提供了丰富的类库用于简化 Windows 应用程序的开发过程[^1]。通过继承和多态机制,开发者可以更方便地操作窗口、菜单和其他控件。 相比之下,Win32 API 则更加底层,采用的是传统的过程化编程方式。程序员需要直接调用操作系统提供的函数来完成各种任务,这通常意味着更多的样板代码以及更高的复杂度[^4]。 #### 2. 类层次结构的支持 MFC 提供了一套完整的类体系结构,其中包含了大量预定义好的基类,比如 `CWnd` 表示基本窗口,`CMDIFrameWnd` 处理 MDI 主框架窗体等。这些现成的组件能够大大减少重复劳动并提高生产效率[^2]。 而在纯 Win32 环境下,则不存在类似的高层次抽象层;所有的图形界面元素都需要手动创建,并且其行为也得由应用程序自行维护。 #### 3. 消息映射机制 对于事件驱动的应用来说,如何有效地管理和响应来自用户的输入至关重要。MFC 中引入了一个叫做“消息映射”的概念——即将特定的消息类型自动绑定到相应的成员函数上执行相应动作。这种方式不仅使得代码逻辑更为清晰直观,同时也增强了可读性和扩展性。 然而,在标准 Win32 下则缺乏这种便捷特性,因此每当遇到新的交互需求时都不得不重新编写大量的分支判断语句来进行分发处理。 #### 4. 数据访问及其他辅助功能 除了上述提到的核心方面外,MFC 还额外集成了诸如 ODBC 支持在内的多种实用工具和服务接口,从而允许快速构建具备数据持久化的解决方案而不必深究细节实现。 至于 Win32 SDK 自身虽然同样支持广泛的外部资源链接,但在实际应用过程中往往涉及到更多繁琐的操作步骤才能达到相同效果。 ```cpp // 创建一个简单的MFC对话框应用程序的例子 class CMyDialog : public CDialogEx { public: afx_msg void OnBnClickedOk(); protected: DECLARE_MESSAGE_MAP() }; BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx) ON_BN_CLICKED(IDOK, &CMyDialog::OnBnClickedOk) END_MESSAGE_MAP() void CMyDialog::OnBnClickedOk(){ // 当点击确定按钮触发此方法 } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值