Microsoft Foundation Classes ( MFC )は、Win32 APIにオブジェクト指向のラッパーを提供するライブラリです。 MFCでは、「生の」Win32 APIをC ++クラスにカプセル化することで、GUIアプリケーションの作成とリソースの管理が大幅に簡単になります。
MFCは非常に長い時間が経ちました。 1992年にMicrosoftのC / C ++コンパイラのバージョン7で初めて導入されました。現時点では、C ++の開発が始まりました。 Visual Studioの後続バージョンには、大幅に改善されたバージョンのMFCが付属しています。それはまだVisual Studio 2015の最新バージョンに含まれています。しかし、その遺産の根は残念ながらかなり目立ちます。そのほとんどはC ++言語の標準化以前に開発されたものなので、MFCクラスはテンプレートなどの最新のC ++機能をフルに活用したり、RTTIなどの標準的なC ++機能を独自に実装したり、 。これらの事実は、Microsoft以外のコンパイラを使用してMFCアプリケーションをコンパイルすることをほぼ不可能にします。しかし、MFCはVisual Studioに完全に統合されているため、開発が大幅に容易になります。
初期の開発段階では、ライブラリはApplication Framework Extensions(AFXと略されています)として知られていました。マーケティング部門は後でその名前をMFCに変更しましたが、コードを変更するには遅すぎました。そのため、コードの多くは「Mfc」ではなく「Afx」を参照しています。目立つ例は、Visual Studioによって自動的に生成される標準のプリコンパイル済みヘッダーファイルです。このファイルはStdAfx.h
という名前StdAfx.h
。
2008年4月7日、MicrosoftはVisual Studio 2008とMFC 9のアウトオブバンドアップデートとしてMFCクラスのアップデートをリリースしました。このアップデートにはリボン(Microsoft Office 2007のものに似ています)完全にカスタマイズ可能なツールバー、(Visual Studio 2005のような)ドッキング・ペインを自由に浮かべたり、サイドタブやドキュメント・タブにドッキングすることができます。新しい機能が新しいクラスで提供されるため、古いアプリケーションは引き続き実行されます。このアップデートは、 BCGSoftの BCGControlBar Library Professional Edition の上に構築され、 MFC Feature Packとして命名されました。
だから今MFCは異なるアプローチの2つのライブラリから構成されています:
// Include the MFC header:
// (you do not need to and should not include the standard Windows headers, e.g.
// Windows.h)
#include <AfxWin.h> // MFC core and standard components
// The following header defines resource constants, such as dialog and control IDs:
#include "resource.h"
// The basic element of an MFC application is a class that inherits from CWinApp.
class CMyApp : public CWinApp
{
// This gets called as the application gets initialized.
virtual BOOL InitInstance()
{
// Initialize a CDialog object to show in a moment.
CDialog dlg(IDD_DIALOG1);
// Display the dialog box as a modal dialog box.
dlg.DoModal();
// Return FALSE from this method to exit the application.
return FALSE;
}
};
// The one and only application object.
CMyWinApp theApp;
概要:
IDD_DIALOG1は、Visual Studioに組み込まれているリソースエディタなどのリソースエディタで作成されたプロジェクトリソースファイルで定義されているダイアログボックスのIDです。 (リソースファイルの拡張子は.rcです)ダイアログの動作をカスタマイズするには、CDialogから新しいクラスを派生させることができます。
モーダルダイアログボックスは、独自のメッセージループを実行します。呼び出し "dlg.DoModal();"ダイアログがユーザーによって閉じられるまで戻りません。
InitInstance()からTRUEを返すと、アプリケーションのメッセージループが開始されます。これは、より複雑で非ダイアログベースのアプリを使用している場合に使用されます。