# Microsoft Foundation Classes

Die Microsoft Foundation Classes (MFC) sind eine Sammlung objektorientierter Klassenbibliotheken (GUI-Toolkit), die von Microsoft für die Programmierung von Anwendungen mit grafischen Benutzeroberflächen für Windows mit C++ entwickelt wurden.

## Geschichte

Microsoft führte die MFC 1992 mit dem hauseigenen Compiler für C++ und C (Microsoft C/C++ 7.0) ein. Die MFC werden mit diversen Microsoft-C++-Compilern ausgeliefert und sind Teil der Vollversionen der integrierten Entwicklungsumgebung Microsoft Visual Studio. Die kostenlosen Visual-Studio-Express-Editionen enthalten die MFC nicht. Im November 2014 veröffentlichte Microsoft jedoch das kostenlose Visual Studio Community 2013, das – wie Visual Studio 2013 Professional und höher – die MFC beinhaltet. Seit Windows 2000 sind oft eine oder mehrere MFC-Programmbibliotheken in einer Betriebssysteminstallation enthalten.
Zur Nutzung von übersetzten MFC-Programmen ist oft keine Installation einer Laufzeitbibliothek notwendig, da auf vielen Windowssystemen schon die „Visual Studio C++ 20XX Runtime“ installiert ist, die wiederum die MFC-Laufzeit enthält.
Ein Merkmal von MFC ist die Verwendung von „Afx“ als Präfix vieler Funktionen, Makros und sein Vorkommen beim standardmäßig vorkompilierten Headernamen „stdafx.h“, was daher rührt, dass in der frühen Entwicklung der MFC diese zunächst „Application Framework Extensions“ genannt und mit „Afx“ abgekürzt wurden. Erst viel später wurde „Afx“ in MFC umbenannt – so spät, dass diese Bezüge nicht mehr verändert werden konnten.
Neben der Weiterentwicklung durch den Hersteller bei weitgehender Abwärtskompatibilität existieren zahlreiche Ergänzungen durch kommerzielle Anbieter sowie eine ausführliche Dokumentation. Alle in Windows verwendeten Steuerelemente können verwendet werden. So sind aktuelle Komponenten aus Windows und anderen Microsoft-Produkten (z. B. Ribbons) in den MFC verfügbar, sowie das aktuelle Aero-Design.

## Funktionsweise

Die MFC dienen als Schnittstelle zu der nicht objektorientierten WinAPI und sollen den Umgang mit den vom Betriebssystem zur Verfügung gestellten Ressourcen erheblich vereinfachen. Die MFC stellen somit eine Umsetzung des Adapter-Entwurfsmusters dar – anstatt nur direkt die Win32-API-Funktionen verwenden zu können, kann der Programmierer nun als Adapter die Klassen der MFC verwenden.
Die MFC unterstützen eine Abwandlung des Model-View-Controller-Architekturmusters. Es werden die Klassen CDocument und CView zur Verfügung gestellt, wobei mit CDocument das Modell, das heißt der Datenbehälter und mit CView sowohl Ansicht als auch Steuerung implementiert werden. Der in Microsoft Visual Studio enthaltene Assistent ermöglicht es, Frameworks unter Verwendung dieser Architektur automatisch zu erstellen.

## Alternative Bibliotheken

Bekannte Alternativen zu den MFC sind zum Beispiel die Active Template Library (ATL, ebenfalls Microsoft), auch in Kombination mit der Windows Template Library (WTL, von Microsoft als Open Source freigegeben), und die Visual Component Library (Borland). Die .NET-Plattform verwendet ein System namens Windows Forms, das von den MFC (und dem Thunderforms-System von Visual Basic) beeinflusst wurde. Im Gegensatz zu MFC wird zur GUI-Entwicklung dabei kein reines C++, sondern die Microsoft-C++-Spracherweiterung C++/CLI verwendet. Plattformübergreifende Alternativen sind Qt und wxWidgets – beide basierend auf C++ – oder GTK+ – basierend auf C. Sie haben außerdem Sprachanbindungen für Java, Perl, Python, Ruby und andere Sprachen.