一 MFC的概念和作用
1 什么是MFC??
全称 Microsoft Foundation Class Library我们称之为微软基础类库
1)从硬盘的存在形式上来说 MFC就是一个库(静/动态库)
2)从原理上来说 MFC还是一个程序框架
2 为什么使用MFC??
基于框架编程提高工作效率,减少开发周期,节约开发成本。
二 几个重要的头文件
afx.h - 包含了MFC库中绝大部分类的声明
afxwin.h - 包含了afx.h和windows.h
afxext.h - 包含了扩展类的声明 例如:工具栏类,状态栏类....

附:*******************************************
以Afx....开头的函数,可以确定为MFC库中封装的全局函数
以::......开头的函数,可以确定为WIN32的API函数

三 MFC程序的分类
1 使用MFC库制作自己的控制台程序
多了一个全局对象 CWinApp theApp
入口函数不同于以往的入口
2 使用MFC库制作自己的静态库程序
3 使用MFC库制作自己的动态库程序
3.1 使用(静/动态)MFC库制作自己的规则动态库程序
3.2 使用MFC制作自己的扩展动态库
区别:规则动态库可以被所有程序调用
扩展动态库只能被支持MFC的程序调用
4 使用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 Dialog Boxes - 对话框窗口类,封装了关于各种对话框窗口的操作
10 Views - 视图窗口类,封装了各种视图窗口的操作
11 Controls - 控件窗口类,封装了各种控件窗口的相关操作
12 CDC及其子类 - 封装了各种绘图设备
13 CGdiObject及其子类 - 封装了关于各种绘图对象的操作。
14 Arrays / Lists / Maps - 封装了C++语法中相应数据结构的操作
15 非CObject类 - 封装了相应结构的操作。
例如: CPoint / CRect / CSize / CTime.....
五 第一个MFC程序
1 配置环境
1.1 将入口函数WinMain删除
1.2 将头文件更改为<afxwin.h>
1.3 Project-->Settings中设置为使用MFC库
2 代码的书写
2.1 从CFrameWnd类派生了一个自己的框架窗口类 CMyFrameWnd
2.2 从CWinApp类派生了一个自己的应用程序类CMyWinApp,并重写父类
的虚函数(InitInstance)
2.3 在InitInstance虚函数中,定义框架类对象并调用Create函数创建框架
窗口
3 程序的执行流程
3.1 构造全局对象theApp(爆破点)
1)将&theApp保存到 当前程序线程状态信息中。
2)将&theApp保存到 当前程序模块状态信息中。
3)AfxGetThread()/AfxGetApp() - 返回&theApp。
3.2 进入入口函数(WinMain)
1)利用AfxGetThread()/AfxGetApp()获取&theApp
2)利用theApp对象调用应用程序类的成员虚函数
InitApplication(初始化)
3)利用theApp对象调用应用程序类的成员虚函数
InitInstance(创建/显示窗口)
4)利用theApp对象调用应用程序类的成员虚函数Run(消息循环)
5)如果没有消息利用theApp对象调用应用程序类的成员虚函数
OnIdle(空闲处理)
6)程序退出时利用theApp对象调用应用程序类的成员虚函数
ExitInstance(善后处理)

易悦(深圳)科技有限公司

让快乐更简单

微信:EJoyYOJOY

微博:http://weibo.com/EJoyYOJOY

官网:http://www.ejoytec.com/

MFC - 微软基础类库和框架的更多相关文章

  1. JDK框架简析--java.lang包中的基础类库、基础数据类型

    题记 JDK.Java Development Kit. 我们必须先认识到,JDK不过,不过一套Java基础类库而已,是Sun公司开发的基础类库,仅此而已,JDK本身和我们自行书写总结的类库,从技术含 ...

  2. MFC编程基础

    http://www.cnblogs.com/lzmfywz/archive/2012/03/15/2399403.html 一.MFC类库概述 MFC(Microsoft Foundation cl ...

  3. Sangmado 公共基础类库

    Sangmado 涵盖了支撑 .NET/C# 项目开发的最基础的公共类库,为团队在不断的系统开发和演进过程中发现和积累的最公共的代码可复用单元. Sangmado 公共类库设计原则: 独立性:不与任何 ...

  4. 【PHP 基础类库】Prototype 原型版教学文章!

    前言 大家好我是:石不易,今天我为大家带来了PHP基础类库原型版的教学文章,至此本人的作品线已分为三大类,分别是:JavaScript前端框架(封装库).PHP模板引擎.以及PHP基础类库.该类库历时 ...

  5. C#-概念-基础类库:基础类库

    ylbtech-C#-概念-基础类库:基础类库 基础类库 (BCL) 是微软所提出的一组标准库可提供.NET Framework所有语言使用. 随着 Windows 以及 .NET Framework ...

  6. 深入浅出node.js游戏服务器开发1——基础架构与框架介绍

    2013年04月19日 14:09:37 MJiao 阅读数:4614   深入浅出node.js游戏服务器开发1——基础架构与框架介绍   游戏服务器概述 没开发过游戏的人会觉得游戏服务器是很神秘的 ...

  7. Java以基础类库

    Java以基础类库JFC(Java Foundation Class)的形式为程序员提供编程接口API,类库中的类按照用途归属于不同的包中. (一)java.lang包 Java最常用的包都属于该包, ...

  8. 转一个 C#基础类库

    转自:http://www.cnblogs.com/sufei/archive/2012/12/07/2807170.html http://www.sufeinet.com/thread-655-1 ...

  9. Java中基础类库使用

    Java中基础类库: 在这里我仅仅介绍几种我个人觉得会常常使用的 1:Object类中的Clone机制仅仅是对对象进行浅层次的克隆,假设须要进行深层次的克隆的话那么就要自己写(详细Clone方法请參考 ...

随机推荐

  1. JMS介绍【转载】

    什么是JMS JMS(Java Message Service) 即Java消息服务.它提供标准的产生.发送.接收消息的接口简化企业 应用的开发.它是J2EE规范的一部分,定义的接口标准,针对不同的厂 ...

  2. 打水印 Imagename_biao是水印文件 ImgName是原图

    /** * 打水印 Imagename_biao是水印文件 ImgName是原图 * @param Imagename_biao * @param ImgName */ public static v ...

  3. 如何捕获access violation异常

    文章目录 access violation的由来 access violation的实例 Win32 exception SEH异常与C++标准异常 捕获方法 1.access violation的由 ...

  4. [delphi]运行cmd命令,并取得输出字符

     http://blog.csdn.net/nerdy/article/details/8969189 [delphi]运行cmd命令,并取得输出字符 标签: delphiCMD命令 2013-05- ...

  5. kangle 默认支持ETag,如果是用kangle做源不会识别,但是做cdn或反向代理会自动识别

    kangle  默认支持ETag,如果是用kangle做源不会识别,但是做cdn或反向代理会自动识别

  6. Sharif University CTF 2016 -- Login to System (PWN 200)

    EN: It's easy to find out where is the bug : .text:0000000000400DE4 ; void *start_routine(void *).te ...

  7. C# 解析json

    在接口开发的过程中经常通过接口获取数据返回是json格式字符串. 但是返回的字符串可能比较复杂,可能不止一种类型的数据. 例如: { "resultCode": "0&q ...

  8. PTA Insertion or Heap Sort

    According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...

  9. 编辑器Ultraedit快捷键

    编辑器Ultraedit快捷键说到编辑器的快捷键,VIM是无与伦比的.要反对,也得是带脚踏板的EmaCS.UE还是有差距的,很大差距.注意:VIM是开源.免费的,而UE则需要注册.UE是Windows ...

  10. Hibernate 知识点梳理

    1.对持久化对象的要求 1)提供一个无参构造器 2)提供一个标识属性,如id,通常映射为数据库表的主键字段. 3)为持久化类的字段提供get.set方法. 注:但不一定所有字段都这么做,对于不提供ge ...