假设我仅将它们用于“普通”GUI程序(没有COM,没有ActiveX,没什么特别的),我将在ATL和MFC之间看到的根本区别是什么,帮我找出使用哪一个?
我在网上做了一些搜索,但最终没有一个答案真的回答了我的问题:
http://msdn.microsoft.com/en-us/library/bk8ytxz5(v=vs.80).aspx:
“ATL是一种快速,简便的方法,可以在C ++中创建COM组件并保持较小的占用空间。如果您不需要所有内置功能,请使用ATL创建控件MFC自动提供。“
没有真正回答我的问题,因为:
我不与COM合作。
这是否意味着MFC 不是快?为什么/怎么样?
“MFC允许您创建完整的应用程序,ActiveX控件和活动文档。如果您已经使用MFC创建了控件,则可能需要在MFC中继续开发。在创建新控件时,如果您不需要MFC的所有内置功能,请考虑使用ATL。“
也不回答我的问题,因为:
我甚至不知道ActiveX 是的原因。
看起来微软似乎不鼓励使用MFC,但我无法弄清楚原因。
究竟是什么?MFC的“内置功能”是ATL不提供的?
一般情况下,这不能回答我的问题,因为没有解释缺点及其背后的原因。
因为直接或间接地,所有内容似乎都链接回上一页:
How do I decide whether to use ATL, MFC, Win32 or CLR for a new C++ project?
“ATL和MFC之间的决定有点棘手。 [[不开玩笑!]] 我会推荐你MSDN's page按顺序选择在他们之间做出决定。“
显然,这不回答我的问题。 :)
http://www.codeguru.com/forum/archive/index.php/t-64778.html
等
我目前观察到的 (在过去几天内,在尝试学习两者时):
但似乎没有任何架构差异:
BEGIN_MSG_MAP
与BEGIN_MESSAGE_MAP
...大不了)CWnd
与CWindow
但是,如果除了编译时与运行时方面之外没有真正的区别,那么为什么它们都存在呢?难道其中一个不够吗?
我在这里缺少什么?
答案 0 :(得分:156)
答案 1 :(得分:18)
很多人都告诉我,他们的编程经验对ATL的痛苦比对MFC的痛苦少。使用ATL,您编译的可执行文件也会小得多。
我建议您take a look at WTL,因为它建立在ATL之上。
他们一直提到的“额外功能”是什么?我需要吗?
如果您定义了要求,如果可以避免使用MFC,则可能更容易回答。不幸的是,“没什么特别的”不够独占。包含您打算使用哪些功能可能更有用(哪些控件,您想要使用哪些框架/技术/现有库等)。
但这里是an article that describes some features in MFC that aren't directly supported by WTL/ATL.
MFC也已经发展到它支持许多理想的功能,例如MAPI,支持其他Windows徽标要求,套接字,文档(如果您喜欢和/或使用该模式)以及复合文档文件。 WTL有很酷的功能,但MFC是明显的功能冠军。这两种环境都支持框架主窗口架构(具有单独视图窗口的框架窗口),SDI和MDI应用程序,拆分窗口,基于对话框的应用程序以及用于COM支持的各种基于COM的类。
答案 2 :(得分:9)
ATL是一组用于简化COM对象实现的类。
您可以在没有MFC的情况下使用它。在我的工作中,我们使用ATL将COM接口暴露给计算代码。没有涉及GUI,我们能够从例如调用此计算代码。 Excel VBA。
查看一些COM指南/教程,了解它的摘要。
MFC只是Win32 API的一组GUI包装类。查看一些Win32 API教程,了解它的摘要。