一 MFC课程的安排
MFC - 微软基础类库和框架
COM - 组件对象的编程原理和应用
ADO - WINDOWS下 数据库的访问和操作
SOCKET - WINDOWS下网络通信编程
二 需要掌握的技能
熟练掌握 断点调试 程序
学会使用 call stack(调用堆栈)查看函数之间的调用关系
熟练掌握 vc下的 向导 和 工具
借助MSDN ,了解整个程序的流程。
三 对大家的期望
不要缺课,课程连续性极强。
多思考,多练习.
营造良好的课堂气氛。
********************************************
一 MFC 概念 和 作用
1 什么是MFC?
全称为 Microsoft Foundation Class Library我们称
之为 微软基础类库。封装了大量windowsAPI函数,以及C++的一些数据结构类。
1.1 MFC就是一个类库(动态MFC库/静态MFC库)
1.2 MFC还是一个应用程序框架
2 为什么使用 MFC
基于框架之上进程编程,提高工作效率,减少开发周期
节约开发成本。
二 MFC的头文件
afx 全称:application framework X(版本)
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库制作自己的规则动态库
使用动态MFC库制作自己的规则动态库
3.2 扩展库
规则库可以被各种程序调用,扩展库只能被支持
MFC的程序调用。
4 使用MFC库制作自己的窗口程序
4.1 单文档视图构架程序
CFrameWnd - 框架窗口类,负责管理主框架窗口。
CWinApp - 应用程序类,负责整个程序的执行流程。
CDocument - 文档类,负责管理数据。
(包含 数据 提取/转换/存储)
CView - 视图窗口类,负责管理视图窗口,显示数据。
4.2 多文档视图构架程序
CMDIChildWnd - 子框架窗口类,负责管理子框架窗口
CMDIFrameWnd - 主框架窗口类,负责管理主框架窗口
CWinApp - 应用程序类,负责整个程序的执行流程。
CDocument - 文档类,负责管理数据。
(包含 数据 提取/转换/存储)
CView - 视图窗口类,负责管理视图窗口,显示数据。
4.3 对话框构架程序
CWinApp - 应用程序类,负责整个程序的执行流程。
CDialog - 对话框类,负责管理对话框窗口。
四 MFC库中类的概述
1 CObject - MFC库中绝大部分类基类。
运行时类信息机制
动态创建机制
序列化机制
2 CCmdTarget - 消息映射机制的最基类
3 CWinThread/CWinApp - 应用程序类,负责程序的流程。
4 CDocument及其子类 - 文档类,负责管理数据。
5 Exceptions - 异常类,封装了MFC程序的各中异常情况
6 CFile及其子类 - 文件操作类,封装了对硬盘文件的各种操作
7 CWnd - MFC库中所有窗口类的最基类。
8 Frame Windows - 框架窗口类,封装了对各种框架窗口的
操作。
9 Dialog Boxes - 对话框类,封装了对各种对话框窗口的
操作。
10 CView及其子类 - 视图窗口类,封装了对各种视图窗口
的操作。
11 Controls - 控件类,封装了对各种控件的操作。
12 CDC/CGdiObject及其子类 - 绘图类,封装了windows下
绘图设备 以及 各种 GDI绘图对象。
13 CArrary/CList/CMap及其子类 - 封装了C++语法中
三种对应的数据结构。
14 非CObject类 - 对各种数据接收进行封装。
例如:CPoint/CRect/CTime/CString
五 第一个MFC程序
1 配置环境
1.1 删除入口函数(WinMain)。
1.2 将头文件 更改为 <afxwin.h>。
1.3 Project-->Settings菜单项中设置使用MFC库。
2 代码的书写
2.1 从CFrameWnd类派生自己的框架窗口类CMyFrameWnd
2.2 从CWinApp类派生自己的应用程序类 CMyWinApp
并定义了一个 这个类的全局对象theApp
还重写了CWinApp::InitInstance成员虚函数。
3 程序执行过程
3.1 构造 theApp 对象,执行CWinApp::CWinApp
将theApp对象地址 保存到 当前程序模块状态信息中
将theApp对象地址 保存到 当前程序线程状态信息中
AfxGetThread / AfxGetApp - 返回theApp对象地址
3.2 进入入口函数调用AfxWinMain
3.2.1 获取 theApp 对象地址
3.2.2 利用 theApp 调用应用程序类的成员虚函数
InitApplication(初始化应用程序)。
3.2.3 利用 theApp 调用应用程序类的成员虚函数
InitInstance(注册窗口/创建并显示窗口)
3.2.4 利用 theApp 调用应用程序类的成员虚函数
Run(消息循环)
1)如果没有消息利用 theApp 调用应用程序
类的成员虚函数OnIdle(空闲处理)
2)如果程序退出利用 theApp 调用应用程序
类的成员虚函数ExitInstance(善后处理)
六 CWinApp类成员
1 成员虚函数
InitApplication
InitInstance
Run
OnIdle
ExitInstance
2 成员变量
m_pMainWnd - 保存 自己new的 框架类对象地址