Предполагая, что я только, используя их для "нормальных" графических программ (нет COM, нет ActiveX, ничего необычного), в чем принципиальное отличие, которое я буду видеть между ATL и MFC, чтобы помочь мне понять какой из них использовать?
Я сделал несколько поисков в Интернете, но в конечном итоге ни один из ответов не ответил на мой вопрос:
-
http://msdn.microsoft.com/en-us/library/bk8ytxz5(v=vs.80).aspx:
-
"ATL - это быстрый и простой способ создать COM-компонент на С++ и поддерживать небольшой размер. Используйте ATL для создания элемента управления, если вам не нужны все встроенные функции, которые MFC автоматически обеспечивает".
Не отвечает на мой вопрос, потому что:
-
Я не работаю с COM.
-
Означает ли это, что MFC не работает быстро? Почему/как?
-
-
"MFC позволяет создавать полные приложения, элементы управления ActiveX и активные документы. Если вы уже создали элемент управления с MFC, вы можете продолжить разработку в MFC. При создании нового элемента управления рассмотрите возможность использования ATL если вам не нужны все встроенные функции MFC."
Также не отвечает на мой вопрос, потому что:
-
Я даже не знаю, что такое ActiveX.
-
Похоже, Microsoft не поощряет использование MFC, но я не могу понять, почему.
-
Что такое MFC "встроенная функциональность", которую ATL не предоставляет?
-
-
В общем, это не отвечает на мой вопрос, потому что он не объясняет недостатки и причины их.
-
потому что прямо или косвенно все, кажется, ссылается на предыдущую страницу:
-
Как мне решить, использовать ли 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
vs.BEGIN_MESSAGE_MAP
... большое дело) - Оба обертывают методы Win32 в классы
- Оба имеют похожие классы
CWnd
vs.CWindow
Но тогда, если нет никакой реальной разницы, кроме аспекта времени компиляции и времени выполнения, то почему они оба существуют? Не должно быть одного из них?
Что мне здесь не хватает?