c++ - microsoft - vs2017 mfc教程




MFC和ATL的根本区别是什么? (2)

ATL是一组旨在简化COM对象实现的类。

你可以使用它,而不使用MFC。 在我的工作中,我们使用ATL将COM接口公开为计算代码。 没有涉及的GUI,这是我们能够从例如这个计算代码中调用。 Excel VBA。

看一些COM指南/教程,看看它的摘要。

MFC只是一组到Win32 API的GUI包装类。 看看一些Win32 API教程,看看它的摘要。

假设我只是将它们用于“普通”GUI程序(没有COM,没有ActiveX,没什么奇怪的),我会在ATL和MFC之间看到什么根本区别,以帮助我找出使用哪一个?

我在网上做了一些搜索,但最终没有一个答案真的回答了我的问题:

  • http://msdn.microsoft.com/en-us/library/bk8ytxz5(v=vs.80).aspx

    • “ATL是一种既快速又简单的方法,既可以在C ++中创建COM组件,又可以保持较小的占用空间。如果不需要MFC自动提供的所有内置功能,则可以使用ATL创建控件。”

      没有真正回答我的问题,因为:

      • 我没有使用COM。

      • 这是否意味着MFC不快? 为什么/怎么样?

    • “MFC允许你创建完整的应用程序,ActiveX控件和活动文档,如果你已经用MFC创建了一个控件,你可能需要在MFC中继续开发,当创建一个新的控件时,如果你不需要,可以考虑使用ATL所有MFC的内置功能。“

      也不回答我的问题,因为:

      • 我甚至不知道ActiveX 什么。

      • 看起来好像微软不鼓励使用MFC,但我不明白为什么。

      • MFC的“内置功能”究竟 ATL不提供的?

    • 总的来说,这并不能回答我的问题,因为它没有解释它们背后的缺点和原因。

因为直接或间接地,一切似乎都链接回上一页:

目前观察到的情况 (在过去的几天里,尽力学习):

  • ATL基于模板或编译时多态性。
    • ATL方法往往是非虚拟的,并倾向于返回引用。
  • MFC基于虚拟方法,或运行时多态。
    • MFC方法往往是虚拟的,并倾向于返回指针。

但是它们之间似乎没有任何架构差异

  • 两者都使用消息映射( BEGIN_MSG_MAPBEGIN_MESSAGE_MAP ...大不了)
  • 两者都将Win32方法包装到类中
  • 两人似乎都有类似的CWndCWindow

但是,如果除了编译时和运行时间方面没有真正的差别,为什么它们都存在? 他们中的一个不够吗?

我在这里错过了什么?


很多人都告诉我,使用ATL的编程经验比使用MFC的时候更不痛苦。 ATL编译的可执行文件也会更小。

我建议你看看WTL ,因为它建立在ATL之上。

他们不断提及的“额外功能”是什么? 我需要它吗?

如果你定义了你的需求,如果你可以避免使用MFC,它可能会更容易回答。 不幸的是,“没有什么特别的”并不足够独家。 对于您打算使用哪些功能可能更有帮助(哪些控件,您要使用哪些框架/技术/现有库等)。

但是这里有一篇文章描述了MFC中不直接被WTL / ATL支持的一些功能。

MFC也发展到支持许多理想的功能,如MAPI,支持其他Windows徽标要求,套接字,文档(如果您喜欢和/或使用该模式)以及复合文档文件。 WTL拥有其很酷的功能,但MFC是清晰的功能冠军。 这两种环境都支持带框架的主窗口体系结构(具有独立视图窗口的框架窗口),SDI和MDI应用程序,拆分窗口,基于对话框的应用程序以及用于COM支持的各种基于COM的类。





atl