Was ist der grundlegende Unterschied zwischen MFC und ATL?

Vorausgesetzt, ich bin nur Sie für die "normale" GUI-Programme (kein COM, kein ActiveX, nichts besonderes), was ist der fundamentale Unterschied, den ich zwischen ATL und MFC, mir zu helfen, herauszufinden, welche zu verwenden?


Ich habe getan, einige suchen im web, aber letztlich keine der Antworten wirklich meine Frage beantwortet:

  • http://msdn.microsoft.com/en-us/library/bk8ytxz5(v=vs. 80).aspx:
    • "ATL ist eine schnelle, einfache Möglichkeit zum erstellen einer COM-Komponente in C++ und halten eine kleine Stellfläche. Verwenden Sie zum erstellen einer ATL-Steuerelement, wenn Sie brauchen nicht alle built-in-Funktionen, die MFC automatisch zur Verfügung stellt."

      Nicht wirklich meine Frage beantworten, weil:

      • Ich arbeite nicht mit COM.
      • Bedeutet dies MFC nicht schnell? Warum/wie?
    • "MFC-ermöglicht Ihnen das erstellen von vollständigen Anwendungen, ActiveX-Steuerelemente und active-Dokumente. Wenn Sie bereits ein Steuerelement mit MFC, möchten Sie vielleicht, um die Weiterentwicklung in MFC. Beim erstellen ein neues Steuerelement, sollten Sie mithilfe von ATL-wenn Sie nicht brauchen, alle von der MFC-built-in-Funktionalität".

      Ist auch nicht meine Frage beantworten, weil:

      • Ich nicht wirklich einmal wissen, was ActiveX ist in den ersten Platz.
      • Sieht es aus, als ob Microsoft entmutigt die Verwendung von MFC, aber ich kann nicht herausfinden, warum.
      • Was genau ist MFC "built-in-Funktionen" ATL nicht?
    • Im Allgemeinen, dies beantwortet nicht meine Frage, weil es nicht erklären, die Nachteile und die Gründe hinter Ihnen.

weil direkt oder indirekt, alles scheint zu link zurück, um zur vorherigen Seite:

Was ich derzeit beobachtet (in den letzten paar Tagen, bei dem Versuch, beides zu erlernen):

  • ATL ist, die auf Vorlagen basieren, oder compile-Zeit-Polymorphismus.
    • ATL-Methoden neigen dazu, nicht-virtuellen, und neigen dazu, die Referenzen zurückgeben.
  • MFC-basiert auf virtuellen Methoden oder Laufzeit-Polymorphie.
    • MFC-Methoden neigen dazu, virtuelle und tendenziell zurück Zeigern.

Aber es scheint nicht zu jedem architektonischen Unterschied zwischen Ihnen:

  • Beide verwenden die message-maps (BEGIN_MSG_MAP vs. BEGIN_MESSAGE_MAP... big deal)
  • Beide wrap-Win32-Methoden in Klassen
  • Beide scheinen zu ähnlichen Klassen CWnd vs. CWindow

Aber dann, wenn es keinen wirklichen Unterschied, außer für den compile-time vs. run-time-Aspekt, warum dann nicht beide existieren? Sollte nicht einer von Ihnen genug sein?

Was vermisse ich hier?

InformationsquelleAutor der Frage Mehrdad | 2011-08-27

Schreibe einen Kommentar