Какова фундаментальная разница между MFC и ATL?

Предполагая, что я только , используя их для «нормальных» программ GUI (NO COM, NO ActiveX, ничего необычного), каковы фундаментальные разница, я увижу между ATL и MFC, чтобы помочь Я понять, какой из них использовать?


Я сделал несколько поисков в Интернете, но в конечном итоге ни один из ответов действительно не ответил на мой вопрос:

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

    • "atl - это быстрый, простой способ создать компонент COM в C ++ и поддерживать небольшой след. Используйте ATL для создания контроля, если вы не T понадобится все встроенные функциональные возможности, которые MFC автоматически предоставляет. «

      на самом деле не отвечает на мой вопрос, потому что:

      • Я не работаю с COM.

      • Это подразумевает это MFC не Быстро? Почему / как?

    • MFC позволяет создавать полные приложения, элементы управления ActiveX и активные документы. Если вы уже создали элемент управления MFC, вы можете продолжить разработку в MFC. При создании нового управления рассмотрим использование ATL Если вам не нужны все встроенные функциональные возможности MFC. «

      также не отвечает на мой вопрос, потому что:

      • Я на самом деле даже не знаю, что ActiveX в первое место.

      • Похоже, Microsoft обескураживает использование MFC, но я не могу понять, почему.

      • Что именно представляет собой [встроенные функциональные возможности MFC », что ATL не предоставляет?

    • в целом, это не отвечает на мой вопрос, потому что Это не объясняет недостатки И причины за них.

Потому что прямо или косвенно все, кажется, связано на предыдущей странице:

То, что у меня есть в настоящее время наблюдается (в течение последних паров дней, пытаясь узнать оба):

  • ATL основан на шаблонах или полиморфизме с течением времени компиляции.
    • Методы ATL, как правило, не являются виртуальными, и имеют тенденцию возвращать ссылки.
  • MFC основан на виртуальных методах или полиморфизме времени выполнения.
    • Методы MFC имеют тенденцию быть виртуальными и имеют тенденцию возвращать указатели.

Но там , похоже, не кажется никакой архитектурной разницей между ними :

  • Оба используются карты сообщения ( right_msg_map vs. right_message_map Большая сделка)
  • Оба обертывания Win32 методы в классах
  • , по-видимому, имеют аналогичные классы CWND против CWindow

, но затем, если нет реальной разницы, за исключением компиляции Время против аспекта времени работы, то почему они оба существуют? Никто из них не будет достаточно?

Что я здесь не хватает?

106
задан Community 23 May 2017 в 12:34
поделиться