[c++] Was ist der grundlegende Unterschied zwischen MFC und ATL?


0 Answers

Viele Leute haben mir gesagt, dass ihre Programmiererfahrung bei ATL weniger schmerzhaft war als bei MFC. Ihre kompilierte ausführbare Datei wird auch mit ATL viel kleiner sein.

Ich empfehle Ihnen , sich WTL anzusehen , da es auf ATL aufbaut.

Was ist diese "zusätzliche Funktionalität", die sie immer wieder erwähnen? Brauche ich es?

Wenn Sie Ihre Anforderungen definieren, ist es möglicherweise einfacher zu beantworten, wenn Sie die Verwendung von MFC vermeiden können. Leider ist "nichts Schickes" nicht exklusiv genug. Es kann hilfreicher sein, zu überlegen, welche Funktionen Sie verwenden möchten (welche Steuerelemente, welche Frameworks / Technologien / vorhandenen Bibliotheken Sie verwenden möchten usw.).

Aber hier ist ein Artikel, der einige Funktionen in MFC beschreibt, die nicht direkt von WTL / ATL unterstützt werden.

MFC hat sich auch zu dem Punkt entwickelt, dass es eine Vielzahl von wünschenswerten Funktionen unterstützt, wie MAPI, Unterstützung für die anderen Windows-Logoanforderungen, Sockets, Dokumente (wenn Sie dieses Muster mögen und / oder verwenden) und zusammengesetzte Dokumentdateien. WTL hat einige coole Features, aber MFC ist der klare Feature-Champion. Beide Umgebungen unterstützen gerahmte Hauptfensterarchitekturen (Rahmenfenster mit separatem Sichtfenster), SDI- und MDI-Anwendungen, geteilte Fenster, dialogbasierte Anwendungen und verschiedene COM-basierte Klassen für die COM-Unterstützung.

Question

Angenommen, ich benutze sie nur für "normale" GUI-Programme (kein COM, kein ActiveX, nichts Besonderes), was ist der grundlegende Unterschied, den ich zwischen ATL und MFC sehen werde, um mir zu helfen, herauszufinden, welche zu verwenden?

Ich habe einige Suchen im Internet durchgeführt, aber letztendlich hat keine der Antworten meine Frage wirklich beantwortet:

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

    • "ATL ist eine schnelle, einfache Möglichkeit, eine COM-Komponente in C ++ zu erstellen und einen geringen Platzbedarf zu bewahren. Verwenden Sie ATL, um ein Steuerelement zu erstellen, wenn Sie nicht alle integrierten Funktionen benötigen, die MFC automatisch bereitstellt."

      Beantwortet meine Frage nicht wirklich, denn:

      • Ich arbeite nicht mit COM.

      • Bedeutet das, MFC ist nicht schnell? Warum wie?

    • "MFC ermöglicht es Ihnen, vollständige Anwendungen, ActiveX-Steuerelemente und aktive Dokumente zu erstellen. Wenn Sie bereits ein Steuerelement mit MFC erstellt haben, möchten Sie möglicherweise die Entwicklung in MFC fortsetzen. Wenn Sie ein neues Steuerelement erstellen, sollten Sie ATL verwenden, wenn Sie nicht benötigen alle integrierten Funktionen von MFC. "

      Beantwortet auch meine Frage nicht, weil:

      • Ich weiß nicht wirklich, was ActiveX überhaupt ist .

      • Es sieht so aus, als ob Microsoft die Verwendung von MFC entmutigt, aber ich kann nicht herausfinden, warum.

      • Was genau ist MFCs "eingebaute Funktionalität", die ATL nicht bietet?

    • Im Allgemeinen beantwortet das meine Frage nicht, weil es nicht die Nachteile und die Gründe dafür erklärt.

weil direkt oder indirekt alles auf die vorherige Seite zurückzuführen scheint:

Was ich gerade beobachtet habe (in den letzten Tagen, als ich versuchte beides zu lernen):

  • ATL basiert auf Vorlagen oder kompilierbarer Polymorphie.
    • ATL-Methoden neigen dazu, nicht virtuell zu sein, und neigen dazu, Referenzen zurückzugeben.
  • MFC basiert auf virtuellen Methoden oder Laufzeitpolymorphismus.
    • MFC-Methoden neigen dazu, virtuell zu sein, und neigen dazu, Zeiger zurückzugeben.

Aber es scheint keinen architektonischen Unterschied zwischen ihnen zu geben :

  • Beide verwenden Nachrichtenkarten ( BEGIN_MSG_MAP vs. BEGIN_MESSAGE_MAP ... große Sache)
  • Beide umhüllen Win32-Methoden in Klassen
  • Beide scheinen ähnliche Klassen CWnd vs. CWindow

Aber wenn es keinen wirklichen Unterschied gibt, außer für den Kompilierungszeit- und Laufzeitaspekt, warum gibt es dann beide? Sollte einer von ihnen nicht genug sein?

Was fehlt mir hier?




Related