首页 > 生活经验 >

问 mfc 基础概念简述

2026-11-09 15:24:14
最佳答案

答

mfc 全称是 Microsoft Foundation Class,也就是微软基础类库,它是微软基于 C++ 开发的一套面向对象类库框架,核心作用是封装 Windows 底层 Win32 API,把窗口 消息 控件 菜单 对话框这些 Windows 原生编程元素打包成 C++ 类,让开发者不用直接手写大量原生 API 代码,快速开发 Windows 桌面图形界面程序,mfc 诞生很早,长期配套 Visual Studio 使用,属于经典老牌 Windows 桌面开发框架,虽然现在新项目更多选用 Qt WPF 等新方案,但是大量工业软件 老企业程序 工控上位机 行业专用软件依旧还在使用 mfc 维护迭代,前面经常遇到的 mfc100u.dll 就是 mfc 对应的 VC2010 版本运行库文件,运行 mfc 编译出来的程序,系统必须带有对应版本 mfc 运行库,否则就会出现 dll 丢失报错。mfc 采用消息映射机制,是它最核心的设计特点,把 Windows 消息和类里面的成员函数绑定,实现窗口事件响应,这套设计是理解 mfc 的关键。

核心基础信息表

项目内容
英文全称Microsoft Foundation Class
中文名称微软基础类库
开发厂商微软
开发语言C++
底层依赖Win32 API
主要用途Windows 桌面 GUI 应用开发
配套开发工具Visual Studio

核心设计原理

mfc 本质是对 Win32 API 的 C++ 面向对象封装,Win32 API 是 C 风格函数接口,调用方式繁琐,需要手动处理窗口句柄 消息循环,mfc 把这些逻辑封装成类,比如 CWinApp 代表应用程序对象,CWnd 代表窗口基类,CDialog 代表对话框,CButton CEdit 代表各类控件。

消息映射是 mfc 标志性机制,Windows 系统本身是消息驱动,鼠标点击 键盘输入 窗口重绘都会产生消息,mfc 通过宏定义建立消息和处理函数的映射表,开发者只需要编写对应的响应函数,不需要自己写庞大的消息循环分发代码。

mfc 还内置文档视图架构,也就是 Doc View 架构,适合做数据和界面分离的程序,文档类负责存储业务数据,视图类负责绘制和交互,这个架构在编辑器类软件里面使用非常广泛。

mfc 版本演进

版本对应 Visual Studio备注
mfc 6.0Visual Studio 6.0经典老版本,大量旧工控软件使用
mfc 7.0Visual Studio .NET 2002支持.NET 过渡
mfc 8.0Visual Studio 2005对应 VC2005 运行库
mfc 9.0Visual Studio 2008对应 VC2008 运行库
mfc 10.0Visual Studio 2010对应 VC2010,也就是 mfc100u.dll 所属版本
后续版本VS2012 及更新版本持续更新,支持新 Windows 系统特性

mfc 优势与局限

优势清单

1 原生 Windows 兼容,编译出来的程序运行效率高,不需要额外大型运行环境,执行速度接近原生 Win32 程序

2 和 Visual Studio 深度集成,拖拽控件 类向导 资源编辑器开发效率高

3 生态成熟,十几年积累大量源码案例 教程 行业项目,工业领域存量项目非常多

4 支持 Unicode 版本,也就是带 u 后缀的库,比如 mfc100u,支持多语言中文等字符

局限清单

1 只支持 Windows 平台,不能跨平台,无法直接编译运行在 Linux 或者 macOS

2 学习门槛偏高,消息映射 Doc View 架构对新手不友好

3 现代 UI 能力弱,默认界面风格老旧,做现代化扁平化界面改造成本高

4 微软已经不再重点主推,新项目一般优先选择其他跨平台框架

mfc 程序运行依赖说明

使用 mfc 编译的程序有两种编译方式,一种是静态链接,把 mfc 库直接打包进 exe,这种程序单独拷贝就可以运行,不需要额外安装运行库。另一种是动态链接,程序启动时调用外部 mfc dll,比如 mfc100u.dll,这种方式 exe 体积更小,但是目标电脑必须安装对应版本 VC 运行库,否则启动报错,这就是前面 dll 丢失问题的根源。

【常见问题】

问题 1 mfc 是什么类型的开发框架

回答 1 mfc 是微软推出的 C++ 面向对象类库框架,mfc 专门用于 Windows 桌面图形界面程序开发,底层封装 Win32 API,属于原生 Windows 开发框架。

问题 2 mfc 可以跨平台开发吗

回答 2 mfc 不支持跨平台,mfc 仅适配 Windows 操作系统,不能直接编译运行在其他系统,这也是 mfc 最大的短板。

问题 3 mfc 里面的 mfc100u 代表什么意思

回答 3 mfc100u 是 mfc 10.0 版本的 Unicode 动态库,对应 Visual Studio2010 版本的 mfc,后缀 u 代表 Unicode 字符集版本,支持中文等多语言字符。

问题 4 mfc 和 Win32 API 是什么关系

回答 4 mfc 并不是替代 Win32 API,mfc 是在 Win32 API 之上做 C++ 类封装,mfc 底层最终还是调用 Win32 API 实现窗口和系统交互。

【免责申明】

本内容属于编程领域通用科普简述,mfc 相关版本特性会随 Visual Studio 更新存在变动,若进行项目开发请参考微软官方 mfc 文档,本内容不构成项目选型建议。