Microsoft Foundation Class
これにより、サービスパックを適用したランタイムをインストールしたり、ランタイムにセキュリティパッチを適用したりすると、旧バージョンのランタイムは上書きされず、新しいバージョンのランタイムが追加インストールされるため、複数の異なるバージョンが共存できる。なお、Visual C++ .NET 2003までは、MFCを使用するアプリケーションの実行プログラムの存在するフォルダにMFCランタイムをコピーして再配布すれば、MFCランタイムがインストールされていないエンドユーザー環境でも実行できていたが、Visual C++ 2005および2008ではこのようなSide-by-Sideアセンブリの形態をとるようになっているため、単純にコピーを添付するだけでは実行することができない。Visual C++ 2005および2008を使用して作成されたMFCアプリケーションをエンドユーザー環境で実行するためには、下記の方法が存在する 。
エンドユーザー環境にVisual C++のランタイムパッケージを別途インストールする。
アプリケーションをビルドする際、CRT/MFCをスタティックリンク(静的リンク)する。
アプリケーションマニフェストを使用してCRT/MFCランタイムをプライベートアセンブリ化する(Windows XP以降)。
1番目の方法は、エンドユーザーの負担が増えるものの、セキュリティ面で最も安全な方法である。
MFCでは、Windowsアプリケーションにおけるメッセージハンドラやウィンドウフレームワークなどの基礎的な部分をあらかじめパッケージ化したほか、GDIオブジェクト、デバイス コンテキスト、スレッド、ソケット、FTP/HTTPなどのインターネットサービス、可変長の文字列、配列やリストといったコンテナなど、一般にアプリケーションでよく使われるようなクラスを備えている。
SDKを使ってWindows APIを直接呼び出すのに比べ、Visual C++の統合環境との親和性が高く開発が容易になるという利点があるが、一方でMFCに過度に依存したプログラムを書くと他のオペレーティングシステム (OS) への移植が難しくなるといった問題もある。
MFCに似たライブラリとしては、Windows Template Library (WTL) がある。
MFCではアプリケーションのコンパイル&ビルド時に設定・定義するMBCS/UNICODEシンボル情報に合わせて、それぞれMBCS版MFCライブラリとUnicode版MFCライブラリが暗黙的にリンクされて使用される。MBCS版とはANSIマルチバイト文字セット (Multibyte Character Set) 版のことで、例えば日本語版の場合Shift_JIS(厳密にはANSIコードページ932)に相当する。データの格納にはchar型およびその配列が主に使われる。Unicode版とはWindows用のUnicode対応版のことで、UTF-16LEに相当する。データの格納にはwchar_t型およびその配列が主に使われる。WindowsではOSの内部文字コードがUTF-16LEのため、一般的にはアプリケーションの内部文字コードとしてUTF-8マルチバイトやUTF-32が使われることは少ない。
MFCアプリケーション開発において、MBCSおよびUnicode両方のバージョンで動作するコードを記述する場合、一般的にはMBCS, _MBCS, UNICODE, _UNICODEなどのシンボル定義状況に応じてコンパイルするコードを分岐させることで対処する。MFC/ATL、標準C/C++ランタイムライブラリ (CRT) およびWin32 APIにはMBCS/Unicode両対応を容易にするためのマクロや、TCHAR, LPTSTR, LPCTSTR型およびCStringクラスといったヘルパーが用意されている。
5 SP1) にもリボン インターフェイスを実装するための「リボン フレームワーク」と呼ばれるAPI群が追加されているが、実質的にCOMコンポーネントを利用したAPIプログラミングであり、さらにリボン フレームワークのコンポーネントが導入されているのはWindows 7およびWindows Vista SP2 Platform Update以降のOSであるため、ネイティブ(アンマネージ)のリボンUIアプリケーションの開発に関しては、MFCの選択は有力候補となり得る。
Visual C++ 2010 (Visual Studio 2010) においては、リボンUIを視覚的に編集する機能(リボン デザイナー)がリソース エディタに追加されたほか、Windows Vista以降のOSに実装されている「タスク ダイアログ」や「再起動マネージャー」などを利用するための機能も追加されている。高DPI環境にも標準対応するようになった(System DPI Aware)。また、Visual C++ 2010へのサービスパック1適用後は、Direct2DラッパーおよびWindows Animation Managerラッパーの機能(クラス ライブラリ)が追加される。
Visual C++ 2015では動的レイアウトにも対応するなど、.NET Frameworkとはまた違った方向の機能拡張が続けられている。