MFC 全称 Microsoft Foundation Classes,也就是微软基础类库,它是基于 C++ 封装 Windows Win32 API 的一套面向对象类框架,核心作用是简化 Windows 桌面程序开发,开发者不用从零手写大量底层窗口消息处理代码,直接继承 MFC 提供的窗口类 视图类 文档类 控件类,快速搭建带界面的桌面软件,学习 MFC 适合已经掌握 C++ 基础语法 类继承 虚函数 消息映射的学习者,它属于传统 Windows 桌面开发技术,现在新项目使用占比下降,但是大量老企业软件 工业上位机 工控软件仍然是 MFC 开发,掌握 MFC 可以维护二次开发这类存量项目,学习的时候重点要理解 MFC 的消息映射机制 文档视图架构 控件使用 资源编辑器,不要只停留在拖拽控件,底层原理理解不到位,后期遇到复杂问题很难调试。之所以现在还有学习价值,是因为国内很多工厂上位机 管理系统 老旧 ERP 客户端都是 MFC 编写,岗位维护需求长期存在,同时学习 MFC 可以吃透 Windows 消息驱动编程思想,就算以后转 Qt WinUI,这套底层逻辑依然可以复用,但是要清楚 MFC 是微软旧技术,只支持 Windows 平台,跨平台能力很差,新版本 Visual Studio 对 MFC 支持也有调整,学习前要选好匹配的开发环境。
学习前置基础
清单
1 C++ 基础 类 继承 多态 指针 引用 虚函数
2 Windows 基础概念 窗口 句柄 消息 消息队列
3 Visual Studio IDE 基本操作 项目创建 编译 断点调试
补充说明 如果 C++ 基础薄弱,不建议直接上手 MFC,很容易看不懂类继承和消息映射宏代码
开发环境准备
推荐环境 Visual Studio 2019 或者 Visual Studio 2022
安装的时候,工作负载勾选 使用 C++ 的桌面开发,组件里面一定要勾选 MFC 和 ATL 支持库,如果安装的时候漏选 MFC 组件,新建项目里面找不到 MFC 应用程序模板。
项目类型常用两种
MFC 基于对话框程序 入门首选,简单快速,适合小型工具软件
MFC 单文档 SDI 多文档 MDI 文档视图架构,适合带文档读写 多视图切换的复杂软件
核心知识点分层学习
第一层 基础概念
MFC 核心是消息映射,它把 Windows 底层消息,通过宏映射到类里面的成员函数,不需要像原生 Win32 那样写庞大的 WndProc 窗口过程函数,常用宏有 BEGIN_MESSAGE_MAP ON_WM_PAINT ON_BN_CLICKED END_MESSAGE_MAP
核心类介绍
CWinApp 应用程序类,整个程序入口,负责程序初始化
CWnd 所有窗口类基类,封装窗口基础操作
CDialog 对话框基类
CButton CEdit CListBox 各类控件封装类
CDocument CView CFrameWnd 文档视图架构三大核心类
第二层 对话框程序开发
学习内容
资源编辑器拖拽控件
控件变量绑定 分为值变量和控件变量
消息响应 添加按钮点击 输入框变化等事件
UpdateData 函数,这个函数非常关键,用来把控件界面数据和类成员变量同步,TRUE 是界面读取到变量,FALSE 是变量更新到界面
第三层 文档视图架构 SDI MDI
学习内容
CDocument 负责数据存储 读写序列化
CView 负责界面绘制 接收用户交互
CFrameWnd 主框架窗口
序列化机制 Serialize 函数,实现文件保存打开
第四层 进阶内容
GDI 绘图 CDC 类 画线 画文字 位图
多线程 MFC 多线程类 AfxBeginThread
数据库操作 ODBC ADO 访问数据库
自定义控件 自绘控件
动态控件创建 运行期 new 创建控件
推荐学习路线步骤
第一步 安装好 VS,创建第一个 MFC 基于对话框项目,编译运行,熟悉项目文件结构
第二步 学习消息映射原理,手动添加一个按钮点击响应函数,理解宏代码
第三步 练习控件绑定,掌握 UpdateData,完成简单计算器小项目
第四步 学习 CDC 绘图,做简单画板程序
第五步 创建 SDI 单文档项目,理解文档视图,实现文件打开保存
第六步 进阶学习数据库 多线程,做综合上位机类项目
第七步 阅读 MFC 源码部分核心实现,理解底层封装逻辑
MFC 和其他框架对比表格
| 框架 | 特点 | 跨平台 |
|---|---|---|
| MFC | C++ 封装 Win32 API,原生 Windows,老项目多 | 仅 Windows |
| Qt | C++ 跨平台,生态新,现在主流桌面开发 | Windows Linux Mac |
| Win32 API | 原生底层,无封装,代码量大 | Windows |
补充注意点
MFC 是比较老旧的技术,网上很多教程是十几年前的老版本 VC6,和新版 VS 操作界面有差别,学习的时候注意区分 VC6 教程和新版 VS 教程。MFC 宏代码看起来比较特殊,初学者会觉得晦涩,核心就是消息分发,不要被宏吓住。如果学习目标是找新开发岗位,MFC 不是首选,优先考虑 Qt,如果是维护存量工控上位机,MFC 学习性价比很高。
【常见问题】
问题 1 mfc 学习教程,零基础可以直接学 MFC 吗
回答 1 mfc 学习教程,零基础不建议直接学 MFC,MFC 依赖 C++ 面向对象和 Windows 消息机制,需要先掌握 C++ 类继承虚函数,不然很难理解 MFC 消息映射和类继承体系。
问题 2 mfc 学习教程,Visual Studio 2022 可以做 MFC 开发吗
回答 2 mfc 学习教程,Visual Studio 2022 可以做 MFC 开发,安装组件的时候必须勾选 MFC 库,否则新建项目模板里面不会出现 MFC 应用程序选项。
问题 3 mfc 学习教程,MFC 是跨平台框架吗
回答 3 mfc 学习教程,MFC 不是跨平台框架,它是微软专门针对 Windows 系统封装的类库,只能在 Windows 平台编译运行,不能直接运行在 Linux 系统。
问题 4 mfc 学习教程,学习 MFC 还有必要吗
回答 4 mfc 学习教程,如果是维护工业上位机和老旧 Windows 客户端项目,学习 MFC 很有必要,如果是开发全新项目,现在一般优先选择 Qt,MFC 新项目使用越来越少。
【免责申明】
本文内容仅作为 MFC 编程学习参考,不同 Visual Studio 版本 MFC 模板和类库细节存在差异,MFC 属于旧版技术,微软后续维护更新有限,本文不对学习过程中代码报错 项目兼容问题造成的损失承担责任。


