MFC主要类库结构总结
MFC类主要分为应用程序结构类、窗口支持类、图书设备类、模版集合类、简单数据类型类以及全局AFX函数等6个类。
1. 应用程序结构类
应用程序结构类代表的是应用程序的基本元素,主要包括了CcmdTarget类、CwinThread类、CwinApp类、Cdocument类以及CdocTemplate类等。应用程序开始运行时,应用程序结构类最先被初始化。应用程序结构类的继承结构如图:
CCmdTarget类是MFC类库中消息映射体系的基类,继承于Cobject类。该类负责把消息命令传递给用户编写的消息响应函数,如果需要处理消息,则从CcmdTarget类中派生一个类出来,但很少从CCmdTarget类直接派生类出来用。
CWinThread类的对象代表应用程序内部运行的线程。运行的主线程通常由CwinApp类的派生类提供。并CwinThread类支持两种线程:工作线程和用户界面线程.工作线程不能够发送、接收消息,通常用于后台运行;用户界面线程能够发送和接收消息,直接派生于CwinThread类。
CWinApp类表示应用程序类,在使用MFC创建的所有应用程序中,都包含一个继承于该类的应用程序子类。CwinApp类中封装了windows的消息循环机制,并负责应用程序的初始化和退出的清理工作。
文档类CDocument类直接派生于CCmdTarget类,提供了文档的基本功能,并且CDocument类是Document/View结构中的应用程序文档的基类,主要用于代表程序中的数据。
CDocTemplate类定义了文档模版的基本函数功能。通常通过应用程序类的InitInstance函数来创建一或多个文档模版。文档模版定义了框架,文档和视图三个类之间的关系。
2窗口支持类
窗口支持类包含了基于Windows应用程序的一些可视性元素,如窗口,对话框,控件等。窗口支持类中的所有类都是从CWnd类中派生的,包括CFrameWnd类,CDialog类,CView类,常用控件等。那么窗口支持类的继承框架如下:
MFC应用程序中的所有窗口都是继承于CWnd类,CWnd类提供了MFC中所有窗口类的基本功能。根据窗口的不同类型,CWnd类派生出了许多子类,如框架窗口类CFrameWnd,对话框类CDialog,视图类CView等。
框架窗口类CFrameWnd提供Windows单文档界面(SDI)的重叠或弹出式的框架窗口,并提供管理窗口的成员。CFrameWnd类的派生类CMDIFrameWnd类则提供了多文档界面(MDI)框架窗口,CMDIChildWnd类则提供了多文档界面的子窗口。
对话框类CDialog类是在屏幕上显示的对话框的基类。CDialog类对象是对话框模版与一个CDialog派生类的组合,通过使用对话框编辑器创建对话框并存入资源之中,然后为对话框创建一个CDialog派生类。
视图类CView是应用程序框架窗口中的子窗口,视图是用户与文档交互的媒介,用户可以在视图窗口内输入文本,绘图等。
3图像设备类
MFC提供图形设备类中包含了设备环境(Device Context)类,以及一些常用的GDI对象。设备环境类中包含了一组绘制图形的函数集合,以及确定绘图的模式和绘图的映射模式。绘图对象类封装了常用GDI绘图对象,包括画笔(Pen),刷子(Brush),字体(Font),位图(Bitmap),调色板(Palette)和区域(Region)这些类的继承结构如下:
根据不同的输出设备, MFC分别提供了相应的设备环境类,而CDC类是所有设备环境的基类,该类封装了所有图形输出函数。CDC类派生了CClientDC类、CMetaFileDC类,CPaintDC类以及CWindowDC类。
CClientDC类主要提供了对窗口的客户区域的图形操作。窗口的客户区域是排除窗口的框架,标题栏,菜单栏,工具栏和状态栏的区域。
CMetaFileDc类专门用于图元文件的绘制。图元文件记录一组GDI命令,可以通过这一组GDI命令重建图形输出。使用CMetaFileDC时,所有的图形输出命令会自动记录到一个与CMetaFileDC相关联的图元文件中。
CPaintDC类是响应WM_PAINT消息的设备环境。当窗口需要重绘时,应用程序响应OnPaint消息来刷新窗口的实现,CPaintDC类通常在MFC应用程序的OnPain函数中使用。
CWindowDC类可以提供在整个窗口内绘图的设备环境,该设备环境可以用于窗口客户区和非客户区的绘制,除非用户需要单独绘制窗口边框和按钮,否则一般不使用CWindowDC环境。
4模版集合类
模版集合类主要分为3个部分:数组类,链表类和映射类,在这里暂不做详细总结
5简单数据类型类
简单数据类型类定义了一些常用的数据类型,包括CPoint类,CSize类,CRect类,CString类和CTime类。分别代表点,尺寸大小,矩形区域,字符串和日期时间,这些都是MFC中常用的数据类型
CPoint类封装了windows的POINT数据结构,并提供了操作CPoint和POINT结构的成员函数。CPoint类对象可以被用在任意可以使用POINT结构的地方。
CRect类封装了Windows的RECT结构。CRect类定义了矩形的左上角和右下角点的坐标,并提供一些基本的矩形处理函数。
CSize类也封装了Windows的SIZE结构。CSize类直接继承SIZE结构体,SIZE和CSize包含了两个cx,和cy的公有成员变量,用来表示一个尺寸大小的宽度和高度。
CString类的对象由可变长的字符组成。CString使用类似于Basic的语法提供函数和操作符。
CTime对象代表一个绝对的时间和日期。CTime类引入了ANSI的time_t数据类型以及相关的运行时函数。
6全局AFX函数
MFC类库主要可以分为两个部分:MFC类和宏与全局函数。
常用的MFC全局函数如下:
全局函数 |
说明 |
AfxMessageBox |
显示一个消息提示框,功能与MessageBox相同 |
AfxFreeLibrary |
用于释放由AfxLoadLibrary载入的动态链接库(DLL)模块 |
AfxGetApp |
取得应用程序中唯一的CWinApp对象的指针 |
AfxGetAppName |
返回一个包含应用程序名字的字符串 |
AfxGetInstance |
获取当前运行实例的句柄 |
AfxGetInstanceHandle |
返回一个代表当前应用程序实例的HINSTANCE变量 |
AfxGetMainWnd |
返回指向应用程序的当前主窗口的指针 |
AfxGetResourceHandle |
返回代表应用程序默认资源的HINSTANCE变量 |
AfxLoadLibrary |
调用一个DLL模版,同时返回一个句柄 |
AfxSocketInit |
初始化Windows套接字Socket |
AfxSetResourceHandle |
设置指向应用程序默认资源的句柄 |
AfxBeginThread |
创建一个新线程 |
AfxEndThread |
结束当前线程 |
AfxGetThread |
取得指向当前线程的CWinThread指针 |
AfxWinInit |
由MFC提供的WinMain函数调用,用于初始化应用程序 |