MFC和ATL之间的根本区别是什么?
假设我仅将它们用于“常规” GUI程序(没有COM,没有ActiveX,没什么花哨的东西),那么我将在ATL和MFC之间看到什么根本的区别,以帮助我确定要使用哪一个? 我已经在网上进行了一些搜索,但最终没有一个答案真正回答了我的问题: http://msdn.microsoft.com/zh-CN/library/bk8ytxz5(v=vs.80).aspx: “ ATL是一种快速,简便的方法,既可以用C ++创建COM组件,又可以保持较小的占用空间。如果不需要MFC自动提供的所有内置功能,则可以使用ATL创建控件。” 并未真正回答我的问题,因为: 我不在使用COM。 这是否意味着MFC 是不是快吗?为什么/如何? “ MFC允许您创建完整的应用程序,ActiveX控件和活动文档。如果您已经使用MFC创建了控件,则可能要继续在MFC中进行开发。创建新控件时,如果不需要,请考虑使用ATL。 MFC的所有内置功能。” 也没有回答我的问题,因为: 我什至不知道ActiveX 首先是什么。 微软似乎不鼓励使用MFC,但我不知道为什么。 ATL没有提供MFC的“内置功能” 到底是什么? 总的来说,这不能回答我的问题,因为它不能解释不利因素及其背后的原因。 因为直接或间接,所有内容似乎都链接回到上一页: 如何确定对新的C ++项目使用ATL,MFC,Win32还是CLR? “在ATL和MFC之间进行选择比较棘手。 [[不开玩笑!]] 我将带您转到MSDN的页面进行选择,以便在它们之间进行选择。” 显然,这不能回答我的问题。:) http://www.codeguru.com/forum/archive/index.php/t-64778.html 等等 我目前观察到的(在最近几天内,试图同时学习两者): ATL基于模板或编译时多态性。 ATL方法往往是非虚拟的,并且倾向于返回引用。 MFC基于虚拟方法或运行时多态性。 MFC方法往往是虚拟的,并且倾向于返回指针。 但它们之间似乎在架构上没有任何区别: 两者都使用消息映射(BEGIN_MSG_MAP与BEGIN_MESSAGE_MAP...大不相同) 两者都将Win32方法包装到类中 两者似乎都有相似的类别CWnd。CWindow 但是然后,如果除了编译时和运行时方面没有真正的区别,那么为什么两者都存在?其中之一不够吗? 我在这里想念什么?