MFC笔记

项目文件配置

将 **.h 放 inc/、.cpp 放 src/**,并让编译器正确找到头文件、生成目标文件(.obj)到指定目录,按以下步骤配置(C++ 项目):

目录结构

在项目根目录(.vcxproj 所在文件夹)新建:

1
2
3
4
你的项目/
├── inc/ # 放所有 .h
├── src/ # 放所有 .cpp
└── 项目.vcxproj

常用宏(方便写路径)

  • $(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