MFC——编程框架和基础

MFC------编程框架和基础

  • 基本概念
  • [MFC 库和头文件对应](#MFC 库和头文件对应)
  • [MFC 应用程序](#MFC 应用程序)
    • [MFC 控制台程序](#MFC 控制台程序)
    • [MFC 库程序](#MFC 库程序)
    • [MFC 窗口程序](#MFC 窗口程序)
  • [MFC 的类](#MFC 的类)

基本概念

MFC 编程框架是微软提供的,用于在 VC++ 环境下编写 Windows 应用程序的一个框架和引擎。微软为 VC++ 专门提供的一个类库,全称为 Microsoft Foundation Classes ,MFC 对 Windows API 进行了封装。微软做了大量的工作,隐藏了很多程序开发人员在 Windows 下用 C++ 编写软件时的大量细节。

MFC 库和头文件对应

头文件 作用
afxwin.h 每个 MFC 程序都应该包含这个头文件,它包含相关所有 MFC 类,并且包含 Win32 的 Windows.h 头文件
afxext.h MFC 扩展头文件,提供工具栏、状态栏程序
afxdlgs.h 使用通用对话框(common dialog)MFC 程序包含头文件
afxcmn.h 使用通用控件(common control)MFC 程序包含头文件
afxcoll.h 使用 MFC 数据集合类(数组、链表类等)的程序需包含此头文件
afxres.h MFC 程序的 RC 文件(资源文件)需要包含此头文件,在这个文件中,包含了 MFC 对于标准 Windows 资源的默认定义

MFC 应用程序

基于 MFC 框架可以开发控制台程序、库程序、窗口程序。

  • 控制台程序:为了兼容 DOS 程序而设立,没有独立的 Windows 窗口
  • MFC 动态库和静态库:可以更方便地将程序分为不同模块,方便使用和维护,而尽量减少该部分对其他程序的影响
  • MFC 窗口程序:拥有独立的 Windows 窗口界面,并且可以通过界面与用户完成交互

MFC 控制台程序

cpp 复制代码
CWinApp theApp;
int _tmain(int arghc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;
	if( !AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)
	{
		....
	}
	else{
		...
	}
}

包含 afx 系列头文件,MFC 初始化函数将应用程序的信息初始化。

MFC 库程序

MFC 库程序包括静态库和动态库。静态库增加了 MFC 的支持,动态库又包括规则库和扩展库。

  • MFC 规则 DLL
    • 使用 MFC 静态库的规则 DLL
    • 使用 MFC 动态库的规则 DLL
  • MFC 扩展 DLL
    • 与 Win32 动态库不同
    • MFC 相关 afx 头文件
    • 包含继承 CWinApp 的子类,并定义了该类的全局变量

MFC 窗口程序

窗口程序是 Windows 窗口程序的 MFC 封装,窗口程序种类包括以下三种:

  1. 单文档视图应用程序:包含一个继承 CWinApp 类,CMainFrame 类,CView 的一个子类,CDocument 的一个子类
  2. 多文档视图应用程序:包含一个继承 CWinApp 类,CMainFrame 类,CView 的一个子类,CDocument的一个子类,CChildFrame 子框架窗口
  3. 对话框应用程序:包含一个继承 CWinApp 类,对话框类 CDialog 的子类

MFC 的类

  1. CObject 类:MFC 类的基础,大部分 MFC 类都是它的子类。CObject 封装了 MFC 的基础的机制,new 和 delete、assert、运行式信息、动态创建、序列化
  2. 应用程序框架类:应用程序启动相关信息,以及 MFC 消息映射机制
  3. 窗口类:封装了窗口操作的 API,各种控件及窗口的框架
  4. 绘图类:提供了绘图 API 的封装,以及相关的 GDI 设备封装
  5. MFC 的集合类:提供了数组、链表、映射的数据结构的操作
  6. MFC 中的类:数据库支持类、ODBC支持类和 DAO 的支持类、同步类、林窃取
相关推荐
W23035765734 小时前
经典算法:最长上升子序列(LIS)深度解析 C++ 实现
开发语言·c++·算法
.Ashy.4 小时前
2026.4.11 蓝桥杯软件类C/C++ G组山东省赛 小记
c语言·c++·蓝桥杯
minji...5 小时前
Linux 线程同步与互斥(三) 生产者消费者模型,基于阻塞队列的生产者消费者模型的代码实现
linux·运维·服务器·开发语言·网络·c++·算法
CoderCodingNo7 小时前
【GESP】C++三级真题 luogu-B4499, [GESP202603 三级] 二进制回文串
数据结构·c++·算法
hetao17338379 小时前
2026-04-09~12 hetao1733837 的刷题记录
c++·算法
6Hzlia9 小时前
【Hot 100 刷题计划】 LeetCode 136. 只出现一次的数字 | C++ 哈希表&异或基础解法
c++·算法·leetcode
汉克老师9 小时前
GESP2024年6月认证C++三级( 第二部分判断题(1-10))
c++·数组·位运算·补码·gesp三级·gesp3级
无限进步_10 小时前
【C++】只出现一次的数字 II:位运算的三种解法深度解析
数据结构·c++·ide·windows·git·算法·leetcode
小贾要学习10 小时前
【Linux】TCP网络通信编程
linux·服务器·网络·c++·网络协议·tcp/ip
哎嗨人生公众号11 小时前
手写求导公式,让轨迹优化性能飞升,150ms变成9ms
开发语言·c++·算法·机器人·自动驾驶