MFC笔记
项目文件配置
将 **.h 放 inc/、.cpp 放 src/**,并让编译器正确找到头文件、生成目标文件(.obj)到指定目录,按以下步骤配置(C++ 项目):
目录结构
在项目根目录(.vcxproj 所在文件夹)新建:
1 | 你的项目/ |
常用宏(方便写路径)
$(ProjectDir):项目文件夹(.vcxproj 所在)$(SolutionDir):解决方案文件夹$(Configuration):Debug/Release$(Platform):Win32/x64%(Filename):源文件名(不含扩展名)$(IntDir):中间文件的输出目录 $(IntDir)$(TargetName):生成的主输出文件的基名称
项目配置
检查中间目录设置
- 确保路径格式为:
$(SolutionDir)自定义目录\$(Configuration)\
预编译头输出路径
在 配置属性 → C/C++ → 预编译头 中→ 预编译头输出文件:
- 预编译头输出文件 → 修改为:
$(IntDir)$(TargetName).pch - 预编译头文件 → 保持默认
pch.h(或检查是否与项目实际名称匹配)
(关键步骤,确保.pch生成路径与中间目录一致,避免路径冲突)

- 预编译头输出文件 → 修改为:
预编译头使用配置(源文件配置)
打开生成预编译头的源文件(通常是pch.cpp):
- 右键文件 → 属性 → 预编译头 → 选择 创建 (/Yc)

其他源文件需设置为 使用 (/Yu)
(确保仅一个文件创建预编译头,其余文件复用)
路径宏必须规范:
$(IntDir) 必须包含配置名(如\Release\),否则多配置编译会冲突
项目新建筛选器
右键点击源文件或头文件→添加→新建筛选器,如下图所示,其中inc和src就是筛选器:
新建筛选器”(New Filter)是一种逻辑分类工具,用于在解决方案资源管理器中按功能或模块组织项目文件(如源代码、头文件等),但不改变物理磁盘的目录结构。
- 筛选器仅在项目配置文件(
.vcxproj.filters)中记录分类关系,不会在磁盘创建实际文件夹。
| 配置项位置 | 作用范围 | 核心功能 | 推荐设置 | 关联文件 |
|---|---|---|---|---|
| VC++目录 → 包含目录 | 解决方案全局 | 所有项目共享的头文件搜索路径 | $(WindowsSdkDir)Include$(ProjectDir)ThirdParty\Include | 第三方库头文件(*.h) |
| C/C++ → 常规 → 附加包含目录 | 当前项目 | 项目专属头文件搜索路径 | $(ProjectDir)include$(OutDir)GeneratedHeaders | 项目私有头文件版本特定头文件 |
| 资源 → 常规 → 附加包含目录 | 资源编译器 | 资源文件(.rc/.rc2)的头文件搜索 | .\resources%(AdditionalIncludeDirectories) | .rc2resource.h |
| 链接器 → 输入 → 模块定义文件 | 当前项目 | 指定模块定义文件路径 | $(ProjectDir)linker\test.def | .def(DLL导出定义) |
| VC++目录 → 库目录 | 解决方案全局 | 所有项目共享的库文件搜索 | $(WindowsSdkDir)Lib$(ProjectDir)ThirdParty\Lib | .lib(静态库) |
| 链接器 → 常规 → 附加库目录 | 当前项目 | 项目专属库文件搜索 | $(ProjectDir)lib$(Configuration) | 配置特定的.lib |
| 文件类型 | 作用 | 路径配置要求 | 典型位置 | 注意事项 |
|---|---|---|---|---|
| .rc2 | 附加资源脚本(共享对话框/图标等) | 必须在资源附加包含目录中配置路径 | /resources /res |
需在主.rc文件中包含:#include “resources/test.rc2” #include “res/test.rc2” |
| .def | DLL导出函数定义 | 需在链接器→模块定义文件显式声明 | /linker | 路径需用宏:$(ProjectDir)linker\test.def |
| resource.h | 资源ID定义(对话框/字符串等) | 需在C/C++附加包含目录或资源附加包含目录配置 | /include | 多文件时划分ID范围:#define IDD_MAIN 1000-1999 |
| .pdb | 调试符号文件 | 通过输出目录控制:$(SolutionDir)bin$(Platform)$(Configuration)\ | /bin | 不可手动包含路径 |
| .dll | 动态链接库 | 通过环境变量配置运行时路径:PATH=$(ProjectDir)bin;%PATH% | /bin | 需与.lib匹配 |
头文件
MFC类库常用的头文件
afx.h-将各种MFC头文件包含在内
afxwin.h-包含了各种MFC窗口类。包含了afx.h和windows.h。
afxext.h-提供了扩展窗口类的支持,例如工具栏,状态栏等。
MFC控制台程序
和win32的控制台程序的差别
main函数不同于普通的控制台程序
CWinApptheApp;多了一个全局对象
经验之谈:
以Afx开头可以确定为MFC库中的全局函数。
以::开头可以确定为win32的API函数。
调试
call statck 查看函数调用关系 MSDN