从此他剪了寸头,他开始抽烟,他熬夜到三四点,他开始相信钱,不再相信任何人,如果不看镜子,我都不认识他了。。。

----  网易云热评

一、MFC的概念和作用

1、什么MFC?

   全称 Microsoft Fundation Class Library,我们称之为微软基础类库   从硬盘的存在形式上来说MFC就是一个库。   从原理上来说,MFC还是一个程序框架。

2、为什么使用MFC?

   基于框架开发,提供工作效率,减少开发周期,降低开发成本。

 

二、MFC应用程序的分类

1、使用MFC制作自己的库程序:静态库程序,规则动态库程序,扩展动态库程序

2、使用MFC制作自己的窗口程序:

单文档视图架构程序

       CFrameWnd - 框架窗口类(封装了框架窗口的操作)

       CWinApp - 应用程序类,(封装了关于流程管理)

       CDocument -文档类,(封装了关于数据的管理,例如:提取/转换/存储..)

       CView - 视图窗口类,(封装了关于视图窗口的操作)

多文档视图架构程序

       CMDIChildWnd - 子框架窗口类(封装了子框架窗口的操作)

       CMDIFrameWnd - 主框架窗口类(封装了主框架窗口的操作)

       CWinApp - 应用程序类,(封装了关于流程管理)

       CDocument -文档类,(封装了关于数据的管理,例如:提取/转换/存储..)

       CView - 视图窗口类,(封装了关于视图窗口的操作)

对话框架构程序

       CWinApp - 应用程序类,(封装了关于流程管理)

       CDialog - 对话框窗口类,(封装了关于对话框窗口的操作)

 

三、MFC类概述

1、CObject - MFC库中绝大部分类的最基类,运行时类信息机制 / 动态创建机制 / 序列化机制

2、CCmdTarget - 消息映射机制的最基类

3、CWinThread / CWinApp - 应用程序类,管理程序流程。

4、CDocument及其子类 - 文档类,管理数据

5、Exceptions - 异常处理类,封装了MFC库中可能出现各种异常情况

6、CFile及其子类 - 文件操作类,封装了文件的读写等等各种操作。

7、CWnd - 所有窗口类的最基类

8、Frame Windows - 框架窗口类,封装了关于框架窗口的各种操作

9、DialogBox - 对话框窗口类,封装了关于各种对话框的操作

10、Views - 视图窗口类,封装了关于各种视图窗口的操作

11、Controls - 控件窗口类,封装了关于各种控件窗口的操作

12、CDC及其子类,绘图设备类,封装了各种绘图设备的操作

13、CGdiObject及其子类,绘图对象类,封装了各种绘图对象的操作

14、Array  / List / Map - 封装了标准中的各种容器结构

15、非CObject类 - 封装了标准中的各种结构的操作,例如:CPoint 、CRect、CTime、CString....

 

 

四、制作第一个MFC程序,环境为VS2019

1、新建新建Windows桌面向导

新建MFC桌面应用程序_封装

2、配置项目

新建MFC桌面应用程序_应用程序_02

3、将该项目设为启动项

4、修改属性为多字节,静态库中使用MFC

新建MFC桌面应用程序_MFC编程_03

5、新建MFCbase.cpp源文件

新建MFC桌面应用程序_应用程序_04

6、文件内容为:

#include <afxwin.h>
//定义一个自己的框架类(CMyFrameWnd),派生自CFrameWnd
class CMyFrameWnd : public CFrameWnd
{
};
//定义一个自己的应用程序类(CMyWinApp), 派生自CWinApp,并重写父类的成员虚函数 InitInstance(创建并显示框架窗口)
class CMyWinApp : public CWinApp
{
public:
CMyWinApp();
virtual BOOL InitInstance();
};
//定义一个非常非常非常重要的全局变量 theApp(爆破点)
CMyWinApp::CMyWinApp()//构造,不写也行,会有默认的
{
}
CMyWinApp theApp;//爆破点
BOOL CMyWinApp::InitInstance()
{//此函数中的this为&theApp
CMyFrameWnd* pFrame = new CMyFrameWnd;
pFrame->Create(NULL, "测试");
this->m_pMainWnd = pFrame;
pFrame->ShowWindow(SW_SHOW);
pFrame->UpdateWindow();
return TRUE;
}

7、程序执行流程:

构造theApp(爆破点)

     1)将&theApp保存到 当前程序线程状态信息 中。

     2)将&theApp保存到 当前程序模块状态信息 中。

进入入口函数(WinMain)

     1)利用 AfxGetThread() / AfxGetApp()获取 &theApp

     2)利用theApp调用应用程序类的成员虚函数InitApplication (初始化)

     3)利用theApp调用应用程序类的成员虚函数InitInstance (创建并显示窗口)

     4)利用theApp调用应用程序类的成员虚函数Run(消息循环)

     5)当没有消息时,利用theApp调用应用程序类成员虚函数OnIdle  (空闲处理)

     6)当程序退出时,利用theApp调用应用程序类成员虚函数ExitInstance (善后处理)

8、运行效果:

新建MFC桌面应用程序_封装_05

注意:

::开头的函数为WIN32的API函数

Afx开头的函数为MFC中的全局函数

 

欢迎关注公众号:顺便编点程

新建MFC桌面应用程序_封装_06