# MFC 简述

MFC (Microsoft Foundation Classes),微软基础类库;
是微软使用 C++ 的特性,在 Win32API 基础上再次进行的封装。


# MFC 基本使用

MFC 只是一个 C++ 类库,我们只需要对 C++ 有一定了解,就能够理解 MFC 的工作机制。
而微软的宇宙第一 IDE Visual Studio 本身也替我们做好了许多工作,这里以 vs2022 为例,对 MFC 的安装与使用进行简单的说明。

# 安装

  1. 运行 Visual Studio Installer
  2. 点击 修改
  3. 选择 单个组件 选项卡
  4. 搜索 MFC ,勾选需要的组件
  5. 点击 修改 ,等待完成即可
    • 我这里已经装过了,就不重新做演示了

# 新建项目

  1. 运行 Visual Studio 2022
  2. 点击 创建新项目
  3. 选择 空项目
  4. 项目名称随意,我这里写 MFCTestProject

# 配置项目

由于是空项目,什么都没有,我们需要自行做一些必要的设置。

  1. 右键 MFCTestProject 项目,选择 属性
  2. 属性页 中选择 高级 选项卡
  3. MFC的使用 选项,修改为 在静态库中使用MFC
    • 在共享DLL中使用MFC 调试时无法找到 MFC 的源码。
  4. 属性页 中展开 链接器 ,选择 系统 选项卡
  5. 子系统 选择 窗口(/SUBSYSTEM:WINDOWS)

# 编写源代码

  1. 新建 .cpp 文件,文件名随意
  2. 编写如下示例代码
    示例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <afxwin.h>
    class CMyFrameWnd :public CFrameWnd {

    };


    class CMyWinApp :public CWinApp {
    public:
    CMyWinApp() {

    }

    virtual BOOL InitInstance() {
    CMyFrameWnd* frame = new CMyFrameWnd;
    frame->Create(nullptr, L"MFCBase");
    m_pMainWnd = frame;
    frame->ShowWindow(SW_SHOW);
    frame->UpdateWindow();
    return TRUE;
    }
    };

    CMyWinApp g_theApp;
  3. F5 运行,编译运行正常会出现这样的窗口

至此,我们就已经建立了一个非常简单的 MFC 程序,并且它还能够运行。

# 源代码注释

接下来我们简单对代码进行一些注释:

#include <afxwin.h>

类似 Win32API 开发时使用的 #include <windows.h>

class CMyFrameWnd :public CFrameWnd {...

创建继承于 CFrameWnd 类的 CMyFrameWnd
CFrameWnd 是对窗口框架的封装

class CMyWinApp :public CWinApp {...

创建继承于 CWinApp 类的 CMyWinApp
CWinApp 是对应用程序执行流程的抽象封装

virtual BOOL InitInstance() {...

CMyWinApp 类中重写 CWinApp 类的 InitInstance 成员虚函数

CMyWinApp g_theApp;

基于 CMyWinApp 类实例化全局对象 g_theApp

当然,这些代码也许会使你感到困惑,毕竟代码中甚至找不到你最熟悉的 main、WinMain,为什么它能够跑起来?

我们将在下篇文章探索 MFC 的程序启动机制。