LoginSignup
16
11

More than 5 years have passed since last update.

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

Posted at

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 から派生したクラスの学習サンクコストの高さ

image.png

16
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
11