一 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. MongoDB服务重启及后台运行解决方法

    1 在MongoDB 安装目录下 新建一个test文件夹 mkdir /test 2 切换到MongoDB的安装目录(可通过 find -name 'mongod'命令查找安装目录)下 执行: bin ...

  2. javascript判断对象

    var assert = require('chai').assert; describe('Array', function() { describe('#indexOf()', function( ...

  3. 如何在Android Studio中添加RecyclerView-v7支持包

    1.打开SDK Manager,在Extras树下找到Android Support Library,下载好支持包.RecyclerView在v7-21版本就出来了.我这里不用更新了,说明是最新的,怎 ...

  4. SQL 高效分页查询

    declare @page int --页码 declare @pagecount int;--每一页显示的记录数 select * from (select *,row_number() over( ...

  5. svg绘制圆弧

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. DataSet读取数据

    using System.Data; using System.Data.SqlClient; namespace ConsoleApplication3 { class Program { stat ...

  7. 发邮件 和 excel导出中文文件名

    /** * 发邮件 * @param email * @param subject * @param body * @throws UnsupportedEncodingException */ pu ...

  8. Qt之QMutex

    概述 QMutex 类使得线程之间可序列化,文档中的描述为provides access serialization between threads 它被设计的初衷是用来保护一个对象.数据结构.代码段 ...

  9. <![CDATA[ ]]> 的作用

    在xml文件中 一些特殊字符需要去除其本意,就要用到 <![CDATA[    ]]>,,比如 ibitis的sqlmap.xml 中  要比较大小不能直接用 < 或者 > , ...

  10. 解决:NoSuchAlgorithmException: Algorithm HmacSHA1 not available

    windows下运行macInstance = Mac.getInstance("HmacSHA1");完全正常,Linux下则出现异常: java.security.NoSuch ...