Microsoft Foundation Class Library (MFC) は、Windows用のデスクトップ アプリケーションを開発するためのC++オブジェクト指向ライブラリです。
MFCは1992年にマイクロソフトによって発表され、瞬く間に広く普及した。その後、マイクロソフトは代替となるアプリケーションフレームワークをいくつか発表しているが、MFCは現在でも広く利用されている。
MFC は、1992 年に Microsoft のC/C++ 7.0コンパイラとともに、Windows API 用の極めて軽量なオブジェクト指向 C++ ラッパーとして、16 ビット版 Windows で使用するために導入されました。当時、商用アプリケーション ソフトウェアの開発では、 C++ がCに取って代わり始めたばかりでした。MFC プログラムでWindows API を直接呼び出す必要はほとんどありません。代わりに、プログラムは Microsoft Foundation Class クラスからオブジェクトを作成し、それらのオブジェクトに属するメンバ関数を呼び出します。これらの関数の多くは、対応する API 関数と同じ名前を持っています。[ 2 ]
MFCの特徴の一つは、多くの関数、マクロ、そして標準のプリコンパイル済みヘッダーファイル「stdafx.h」の接頭辞として「Afx」が使われていることです。開発初期段階では、後のMFCは「Application Framework Extensions」と呼ばれ、「Afx」と略されていました。Microsoft Foundation Classes(MFC)という名称が採用されたのはリリースサイクルのかなり後期だったため、これらの名称を変更することができませんでした。
MFC 8.0 は Visual Studio 2005 でリリースされました。MFC 9.0 は Visual Studio 2008 でリリースされました。2008 年 4 月 7 日、Microsoft は Visual Studio 2008 および MFC 9 の帯域外更新として MFC クラスの更新をリリースしました。[ 3 ] [ 4 ] [ 5 ]この更新では、リボンと関連する UIウィジェット、完全にカスタマイズ可能なツールバー、自由にフローティングしたり任意のサイドにドッキングしたりできるドッキング ペイン、ドキュメントタブなどの新しいユーザーインターフェイス構造が特徴となっています。[ 6 ]
MFC は当初、Visual Studio の商用版の機能でした。そのため、フリーウェアのVisual C++ Expressには含まれていません。[ 7 ]ただし、2014 年に導入されたVisual Studio の Community 版には MFC が含まれています。
Object Windows Library (OWL) は、Borland のTurbo C++コンパイラで使用するために設計された競合製品で、Borland がほぼ同時期に発表しました。最終的に、Borland は OWL の開発を中止し、Microsoft [ 8 ]から MFC のヘッダー、ライブラリ、DLL の配布を短期間ライセンス供与しましたが、MFC の完全な統合サポートは提供されませんでした。その後、Borland はOWL フレームワークに代わるものとしてVisual Component Library をリリースしました。
MFC は、Windows API の一部を C++クラスでラップするライブラリです。[ 9 ]これには、デフォルトのアプリケーション フレームワークを使用できるようにする機能が含まれます。ハンドル管理の Windows オブジェクトや、定義済みのウィンドウ、一般的なコントロールの多くに対してクラスが定義されています。
MFC の導入当時、Windows メッセージ処理 (メッセージ マップ[ 10 ]経由)、例外処理、実行時型情報(RTTI)、シリアル化、および動的クラスインスタンス化のための C++マクロが提供されていました。メッセージ処理用のマクロは、不要な仮想テーブルの使用を避けることでメモリ消費量を削減し、また、Visual C++ が提供するさまざまなツールが言語全体を解析することなくコードを編集および操作するための、より具体的な構造を提供することを目的としていました。メッセージ処理マクロは、C++ が提供する仮想関数メカニズムに取って代わりました。
シリアル化、例外処理、RTTI 用のマクロは、Microsoft C++ でこれらの機能が利用可能になる何年も前から存在していました。Windows NT 3.1以降の Windows オペレーティングシステム向けの32 ビット版 MFC では、言語機能を実装したコンパイラが使用され、マクロはカスタマイズされた実装を提供するのではなく、単に言語機能をラップするように更新され、上位互換性が実現されました。
MFC リボン リソース エディターを使用すると、開発者はRibbonX API のようなXMLベースの宣言的マークアップを使用する代わりに、リボンをグラフィカルに設計できます。オプションで、リボン コンポーネントは、新しいリボン クラス メソッド セットを呼び出すことによって直接プログラムできます。開発者は、都合に合わせてグラフィカル リボン開発とプログラムによるリボン開発を混在させることができます。MFC アプリケーション ウィザードも、アプリケーションがリボンを使用するかドッキング ペインを使用するかを選択するチェックボックスなど、新機能をサポートするようにアップグレードされています。新しい機能は新しいクラスで提供されるため、古いアプリケーションは引き続き実行できます。[ 6 ]このアップデートは、 BCGSoftのBCGControlBar Library Professional Editionをベースにしています。 [ 11 ] Microsoft は、リボンのユーザーに追加のライセンス要件を課しています。[ 12 ]これには、Microsoft UI デザイン ガイドラインを遵守する要件と、 Microsoft Officeと競合するアプリケーションで UI を使用することを禁止する反競争条項が含まれます。
MFCは、静的ライブラリをリンクするか、MFCダイナミックリンクライブラリ(DLL)を追加することによって使用できます。