gpt4 book ai didi

c++ - MFC和ATL之间的根本区别是什么?

转载 作者:行者123 更新时间:2023-12-01 17:34:25 31 4
gpt4 key购买 nike

假设我是 仅限 将它们用于“普通”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,但我不知道为什么。
  • 究竟是什么 ATL没有提供的MFC的“内置功能”?
  • 一般来说,这并不能回答我的问题,因为 它没有解释缺点以及它们背后的原因。

  • 因为直接或间接地,一切似乎都链接回了上一页:
  • 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

  • 我有什么 目前观察到 (在过去的几天内,同时尝试学习两者):
  • ATL 基于模板或编译时多态性。
  • ATL 方法往往是非虚拟的,并且往往返回引用。
  • MFC 基于虚拟方法或运行时多态性。
  • MFC 方法往往是虚拟的,并且往往返回指针。

  • 但它们之间似乎没有任何架构差异:
  • 两者都使用消息映射(BEGIN_MSG_MAPBEGIN_MESSAGE_MAP ... 很重要)
  • 两者都将 Win32 方法包装到类中
  • 两者似乎都有相似的类(class)CWndCWindow

  • 但是,如果除了编译时和运行时方面没有真正的区别,那么为什么它们都存在呢?其中一个不应该足够吗?

    我在这里想念什么?

    最佳答案

    许多使用过这两种方法的人告诉我,他们的编程体验使用 ATL 不如使用 MFC 痛苦。使用 ATL,您编译的可执行文件也将小得多。

    我推荐你take a look at WTL ,因为它建立在 ATL 之上。

    What is that "extra functionality" they keep mentioning? Do I need it?



    如果您定义了您的要求,那么如果您可以避免使用 MFC,可能会更容易回答。不幸的是,“没什么花哨的”还不够独特。包含您打算使用哪些功能可能会更有帮助(哪些控件,您想要使用哪些框架/技术/现有库等)。

    但是这里是 an article that describes some features in MFC that aren't directly supported by WTL/ATL.

    MFC also has evolved to the point it supports a great many desirable features, such as MAPI, support for the other Windows logo requirements, sockets, documents (if you like and/or use that pattern), and compound document files. WTL has its share of cool features, but MFC is the clear feature champ. Both environments support framed main window architectures (frame window with separate view window), SDI and MDI applications, split windows, dialog-based applications, and various COM-based classes for COM support.

    关于c++ - MFC和ATL之间的根本区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7212051/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com