写在前面
大家好!今天我们来聊聊用 Visual Studio(简称 VS,一个微软的编程软件)创建 MFC 项目时,那些自动生成的文件夹和文件到底是干嘛的。MFC 全称是 Microsoft Foundation Classes,翻译成“微软基础类库”,它是一个用 C++ 语言写的工具包,帮助你快速做出 Windows 桌面软件,比如一个简单的弹出窗口(对话框程序)。
首先我们需要创建一个项目骨架。
MFC项目骨架创建
创建新项目
配置新项目
选择基于对话框
文档模板属性
啥也选不了!
用户界面功能
就是默认的勾选:粗框架,系统菜单,关于框,只有这三个勾选了!
高级功能
默认只勾选了:打印和打印预览,ActiveX控件,公共控件清单,支持重启管理器,支持应用程序恢复。
生成的类
默认就是App。
然后,点击完成按钮,就会出现如下界面:
打开项目所在目录
就会出现如下资源
骨架解读
如果你是编程小白,刚创建了一个基于对话框的 MFC 项目,看到项目文件夹里一堆文件,肯定会想:“这些是啥?为什么要有这么多?”别慌!我会用最接地气的语言解释每个文件。每个部分,我都会告诉你:
为什么生成这个文件?(目的:为了让程序更容易开发、运行或管理。)它的作用是什么?(简单比喻,让你秒懂。)
我会避免生涩的英文术语。项目名我用“你的项目”(比如 MyApp)来举例。你刚才生成的结构大致是这样:
文件夹:.vs、res文件:framework.h、pch.cpp、pch.h、Resource.h、targetver.h、你的项目.aps、你的项目.cpp、你的项目.h、你的项目.rc、你的项目.sln、你的项目.vcxproj、你的项目.vcxproj.filters、你的项目.vcxproj.user、你的项目Dlg.cpp、你的项目Dlg.h
这些文件不是乱生成的,而是 VS 为了帮你“搭好架子”,让你直接写核心代码。就像做饭,VS 先准备好锅碗瓢盆(这些文件),你只需加食材(你的逻辑)。下面按类别分群解释。
1. 项目管理和构建文件
(这些是“总蓝图”,帮 VS 知道怎么“造”你的程序)
这些文件管理整个项目的“建筑图纸”和设置。为什么生成?因为 MFC 项目需要编译成可运行的 EXE 文件(executable,可执行文件),这些文件告诉 VS 如何一步步构建,避免你从零配置。
你的项目.sln(解决方案文件,全称 Solution,意思是“整体方案”,大小约 2 KB)
为什么生成? 为了把项目当成一个“整体包”,方便 VS 加载和管理多个文件(大项目可能有子项目)。
作用是什么? 就像一本书的目录,记录项目的所有信息,比如文件位置、调试模式(测试运行)。小白用法:双击这个文件,就能用 VS 打开整个项目。别手动改它,VS 会自动更新。
你的项目.vcxproj(项目配置文件,全称 Visual C++ Project,意思是“C++ 项目文件”,大小约 11 KB)
为什么生成? 为了定义项目的“建造规则”,如用哪些工具(MFC 库)、输出什么(EXE 文件)。这是 MFC 项目的核心设置。
作用是什么? 像建筑施工图,告诉 VS:“用这些代码文件,按这个顺序编译,链接 MFC 库。” 你加新代码时,它会更新。小白别动它,除非想改高级选项。
你的项目.vcxproj.filters(过滤器文件,全称 Filters,意思是“分类器”,大小约 3 KB)
为什么生成? 为了在 VS 的“解决方案资源管理器”(文件浏览窗口)里,把文件分组显示,便于你找东西。
作用是什么? 像文件管理器的文件夹标签,把头文件(.h)和源代码(.cpp)分开显示。实际文件位置没变,只是视图更整洁。加新文件,VS 自动调整。
你的项目.vcxproj.user(用户设置文件,全称 User,意思是“个人偏好”,大小约 1 KB)
为什么生成? 为了保存你个人的配置,比如调试工具的习惯,不影响别人(比如团队开发时)。
作用是什么? 像你的私人日记,记录窗口布局、启动参数。换电脑时,它不跟着项目走,VS 会重新生成。
.vs 文件夹(VS 内部文件夹,全称 Visual Studio,隐藏的)
为什么生成? 为了存储临时数据,加速 VS 的运行,比如代码提示的缓存。
作用是什么? 像浏览器的临时文件区,帮 VS 记住项目状态。如果项目卡顿,删掉它重启 VS 就能刷新(但先备份项目)。
2. 资源管理文件
(这些是“外观装饰”,管窗口、图标等视觉东西)
MFC 对话框程序需要图标、按钮布局等“资源”(Resource,意思是“材料”)。为什么生成?因为 Windows 软件离不开这些视觉元素,VS 帮你预备好模板,省得你从头画。
res 文件夹(资源文件夹,全称 Resource)
为什么生成? 为了集中存放图片、图标等文件,便于管理和编译进程序。
作用是什么? 像相册文件夹,默认放程序图标(.ico 文件)。想加自定义图片,就扔这里。VS 的资源编辑器(可视化工具)会用它。
你的项目.rc(资源脚本文件,全称 Resource Compiler,意思是“资源描述脚本”,大小约 10 KB)
为什么生成? 为了用文本描述对话框的外观,比如按钮位置、菜单文字,便于编译成二进制资源。
作用是什么? 像网页的布局代码,定义窗口长啥样(默认有“关于”框和系统菜单)。小白用法:双击用 VS 编辑器拖拽修改按钮。
Resource.h(资源头文件,全称 Resource Header,意思是“资源编号表”,大小约 1 KB)
为什么生成? 为了给每个资源(如按钮)一个唯一编号,方便代码引用。
作用是什么? 像电话簿,列出 ID(如 IDD_DIALOG1 = 101,是对话框的号码)。代码想改按钮文字,就用这里的 ID。
你的项目.aps(辅助资源文件,全称 Auxiliary Project State,意思是“资源临时状态”,大小约 90 KB)
为什么生成? 为了加速资源编辑器的加载,保存资源的二进制快照。
作用是什么? 像缓存文件,帮 VS 快速打开资源。删掉也没事,VS 会重造。
3. 核心代码文件
(这些是“程序大脑”,你主要在这里写逻辑)
这些是 C++ 代码文件,分头文件(.h,声明东西)和源文件(.cpp,实现东西)。为什么生成?MFC 用“类”(Class,意思是“类型模板”)组织代码,VS 自动创建应用类和对话框类,让程序能启动和显示窗口。
你的项目.h(应用头文件,大小约 1 KB)
为什么生成? 为了定义程序的启动类(继承 MFC 的 CWinApp,意思是“Windows 应用”),这是 MFC 要求的入口。
作用是什么? 像程序的“启动按钮”蓝图,声明初始化函数。帮你准备好框架,你只需加自定义启动逻辑。
你的项目.cpp(应用源文件,大小约 3 KB)
为什么生成? 为了实现程序启动,比如创建并显示主对话框。
作用是什么? 像启动脚本的身体,默认代码会弹出对话框。想改程序开头,就在这里写。
你的项目Dlg.h(对话框头文件,全称 Dialog,意思是“对话框”,大小约 1 KB)
为什么生成? 为了定义对话框类(继承 CDialogEx,MFC 的对话框模板),管理窗口控件(如按钮)。
作用是什么? 像窗口的“零件清单”,声明按钮变量和事件函数(比如初始化窗口)。
你的项目Dlg.cpp(对话框源文件,大小约 4 KB)
为什么生成? 为了实现对话框的动作,比如按钮点击时干啥。
作用是什么? 像窗口的“操作手册”,默认有“关于”框的代码。你加按钮事件,就在这里实现(例如,点击显示“Hello World”)。
4. 辅助支持文件
(这些是“加速工具”,让编译更快、兼容更好)
这些头文件是“通用零件”。为什么生成?为了优化性能和兼容性,MFC 项目默认包含它们,避免重复写代码。
framework.h(框架头文件,全称 Framework,意思是“基础框架”,大小约 2 KB)
为什么生成? 为了集中导入常用库(如 MFC 和 Windows API,Application Programming Interface,意思是“编程接口”)。
作用是什么? 像工具箱,一次性包含所有常用头文件,其他代码直接用,节省打字。
pch.h(预编译头文件,全称 Precompiled Header,意思是“提前编译的头”,大小约 1 KB)
为什么生成? 为了加速编译,不变的库先预处理好。
作用是什么? 像预热饭锅,包含 MFC 核心,编译时跳过重复部分。
pch.cpp(预编译源文件,大小约 1 KB)
为什么生成? 为了触发预编译过程。
作用是什么? 像开关文件,通常就一行代码,激活 pch.h。
targetver.h(目标版本头文件,全称 Target Version,意思是“目标系统版本”,大小约 1 KB)
为什么生成? 为了指定程序兼容的 Windows 版本(如 Windows 7 以上)。
作用是什么? 像兼容标签,确保程序在老系统上跑。如果支持更旧 Windows,改这里的数字。
结语
小白如何玩转这些文件?
这些文件总共就为了一个目的:让你少写 boilerplate code(样板代码,意思是“重复的模板”),直接专注有趣的部分。比如,加个按钮显示消息,就改 Dlg 文件和 rc 文件。起步建议:运行项目(按 F5),看默认窗口;然后用资源编辑器加控件,写事件代码。
为什么 MFC 要这么多文件?因为它是老前辈(1990 年代),设计时强调模块化,便于团队和大项目。现在的新框架(如 Qt)简化了,但 MFC 适合学 Windows 底层。实践多试错,很快就熟!有疑问评论区见,点个赞支持哦~ 😊
暂无评论内容