Posted at

MFCプログラマーの「MFC」ってなんですか?

Visual C++ によって実装された Microsoft のクラスライブラリ Microsoft Foundation Class です。

要点をまとめてみると、


  1. (過去).NET Framework 登場前は Windows アプリ開発の主役

  2. (現在) MFC の新規開発はもうないでしょう

  3. (未来)古いアプリを流用したり、保守したりということはときどきある

  4. .NET での開発が主流となって、 MFC を扱える人もどんどん減っている

MFC に長く触れていると、「C++ 開発者です!」と言い切れない歯がゆさがあったりします。(ラッパークラスばかり使うことになるので、標準C++へのキャッチアップが疎くなるような気がするからです)


ダイアログベースアプリのイニシャライズの例

BOOL CMFCApplicationDlg::OnInitDialog()

{
CDialog::OnInitDialog();

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
return TRUE;
}


CDialogCMenuCString など、Cxxxx クラスの prefix をもったものを扱いながら開発をすすめていきます。


MFC の良き

Document View アーキテクチャーを採用していて、メッセージパッシングでビューとドキュメントがやり取りするようになっています。

MFCの作法にしたがうかぎり、ビューとドキュメントが疎結合で見通しのよいコードベースになります。


MFC のツラみ

CObject から派生したクラスの学習サンクコストの高さ