MFC基本层次结构

原创 2011年07月29日 15:57:00

1,CObject

CObject是大多数MFC类的根类或基类。CObject类有很多有用的特性:对运行时类信息的支持,对动态创建的支持,对串行化的支持,对象诊断输出,等等。MFC从CObject派生出许多类,具备其中的一个或者多个特性。程序员也可以从CObject类派生出自己的类,利用CObject类的这些特性。

2,CCmdTarget

类CCmdTarget是MFC类库中消息映射体系的一个基类。消息映射把命令或消息引导给用户为之编写的响应函数(命令是由菜单项、命令按钮或者加速键产生的消息)。从CCmdTarget继承来的按键框架类包括:CView、CWinApp、CDocument、CWnd和CFrameWnd。如果想生成一个处理按键消息的类,可以选择其中的一个派生一个子类。很少需要直接从CCmdTarget派生类。  CCmdTarget类是MFC处理命令消息的基础、核心。MFC为该类设计了许多成员函数和一些成员数据,基本上是为了解决消息映射问题的,而且,很大一部分是针对OLE设计的。在OLE应用中,CCmdTarget是MFC处理模块状态的重要环节,它起到了传递模块状态的作用:其构造函数获取当前模块状态,并保存在成员变量m_pModuleState里头。  CCmdTarget有两个与消息映射有密切关系的成员函数:DispatchCmdMsg和OnCmdMsg。  类CmdTarget包括了处理沙漏形光标显示的成员函数。当某个命令的执行时间比较长时,可以显示沙漏标提示用户命令正在执行。  和消息映射类似,分派映射用于列出OLE自动的IDispatch功能。列出这个接口后,其它的应用(如VB)就能调用这个应用了。有关IDispatch接口的更详细的信息,请参阅“Win32 SDK OLE程序员参考”中的“创建IDPatch接口”和“分派接口与API函数”。

3,CWinThread

CWinThread类是MFC用来封装线程的,包括UI线程和工作者线程。因此每个MFC程序至少使用一个CWinThread派生类。被MFC程序员熟知的CWinApp应用类就从这里派生。

4,CWinApp

CWinApp为应用程序类  MFC 中的主应用程序类封装用于 Windows 操作系统的应用程序的初始化、运行和终止。基于框架生成的应用程序必须有且仅有一个从 CWinApp 派生的类的对象。在创建窗口之前先构造该对象。  CWinApp 是从 CWinThread 派生的,后者表示可能具有一个或多个线程的应用程序的主执行线程。在最新版本的 MFC 中,InitInstance、Run、ExitInstance 和 OnIdle 成员函数实际位于 CWinThread 类中。此处将这些函数作为 CWinApp 成员来探讨,因为探讨所关心的是对象作为应用程序对象而不是主线程的角色。

5,CDocument

CDocument类为用户定义的文档类提供了基本的函数功能。文档类表示了通常用于File Open命令打开和使用File Save命令保存的数据。  CDocument支持标准操作,如创建、装载、保存等。框架用CDocument定义的界面来操作文档。  应用可支持多种文档,例如文本文档和工作表。每种类型都有一个相关的文档模板。文档模板指定该类文档所使用的资源(如菜单、图标和加速符号表)。每个文档还含有一个CDocTemplate对象指针。  用户通过与文档相联系的CView对象来与之交互。视图在框架窗口内生成一个文档图象,并解释作用于该文档之上的用户输入。一份文档可以有多个相关的视图,当用户在文档上打开一个窗口时,框架创建一个视图并将其与文档连接。文档模板为每类文档指定了用于显示的视图类型和框架窗口。  文档作为窗口标准命令例程的一部分,接收标准用户界面组件(如FileSave菜单项)的命令。文档在活动视图之后接收命令。如果文档未能处理指定的命令,则将其交给管理它的文档模板。  当文档数据被修改时,各个视图都必须反应这些修改。CDocument提供了UpdateAllViews成员函数为视图通知这些变化。框架在关闭之前会提示用户必须存储修改后的文件。  在一个典型的应用中生成一个文档,必须做到以下几点:  ·为每种类型的文档从CDocument中派生一个类。  ·添加保存在文档数据的成员变量。  ·为阅读和修改文档数据提供成员函数,文档的视图是这些成员函数最重要的用户。  ·在文档类中覆盖CObject::Serialize成员函数,从磁盘读取文档数据或将其写入磁盘。  CDocument支持通过邮件发送文档,如果存在邮件支持(MAPI)的话。  所需头文件:#include <afxwin.h>

6,CWnd

既然窗口操作是Windows编程的核心内容,那么窗口基类CWnd在MFC类结构中的核心地位就无可争议了。它派生于CCmdTarget类,是最基本的GUI对象。我们在屏幕上看到的一切对象都与窗口有关,它们或者派生于CWnd,属继承关系,如对话框、工具栏、状态栏、子控件;或者被CWnd合成,属服务员与服务对象的关系,如图标、菜单、显示设备。  窗口类CWnd与Windows操作系统管理是显示(或隐藏)给用户的,作为应用程序的一种表现形式的窗口是两个概念。前者通过一个窗口句柄操作后者,不同的操作被封装为不同的成员函数。而后者,操作系统为其开辟了一个内存区,存储一个数据结构,进行管理。后者包括窗口风格、窗口类、当前状态等信息。  其实我们可以理解,CWnd是MFC中所有组件对象的父类,GetDlgItem()可以通过组件的ID号得到组件对象的地址,这里是以父类指针CWnd*返回,如果需要使用可以强转,CWnd类封装的窗口操作主要包括窗口的创建和销毁、操作窗口风格、操作窗口状态、窗口子类化、获取指定窗口等。除窗口操作外,CWnd类还实现以下功能。

7,CView

CView是视图是程序设计中使用率最高的窗口对象,它是用户的主要操作界面。因为它通常以某种形式表示文档数据,所以称之为视图。一个视图对象只关联一个文档对象;一个文档对象可以关联多个视图,每个视图对象以不同形式表示文档数据。

从文档类中将文档中的数据取出后显示给用户;接受用户对文档中数据的编辑和修改;将修改的结果反馈给文档类,由文档类将修改后的内容保存到磁盘文件中。  文档负责了数据真正在永久介质中的存储和读取工作,视图呈现只是将文档中的数据以某种形式向用户呈现,因此一个文档可对应多个视图。  Invalidate(TRUE)将整个窗口设置为需要重绘的无效区域,它会产生WM_PAINT消息,这样OnDraw将被调用。  假如文档中的数据发生了变化,必须通知所有链接到该文档的视图,这时候文档类的UpdateAllView函数需要被调用。  然而,除了打印和打印预览外,视图类显示得很简单。

8,CDialog

  CDialog类是在屏幕上显示的对话框基类。对话框有两类:模态对话框和非模态对话框。模态对话框在应用继续进行之前必须关闭。非模态对话框允许用户执行另外的操作而不必取消或删除该对话框。

9,CFrameWnd

CFrameWnd类往往用于创建应用程序的主窗口,因为它能很好地支持系统菜单和控制条(工具条、状态条等),为此定义了大量的成员函数和变量。在编写文档/视图结构的应用程序时,CFrameWnd作为主窗口管理视图和文档对象。视图对象和控制条都成为CFrameWnd的子窗口,它们分享客户区,其位置被CFrameWnd有效地排列。 CFrameWnd直接支持单文档界面(SDI),对于多文档界面(MDI),使用其派生类CMDIFrameWnd和CMDIChildWnd。

10,CMDICFrameWnd

11,CMDICChildWnd

12,CMiniFrameWnd

待续。。。。。。


MFC基础类层次结构及其运行机制

1、从根类Cobject层层派生出绝大多数MFC中的类,其层次结构为下图所示 2、从类CComdTarget层层派生出绝大多数MFC中的类,其层次结构为下图所示 3、MFC中重点类 CO...
  • tfygg
  • tfygg
  • 2016年03月14日 17:18
  • 1237

android 系统基本架构-软件层次

Android 体系结构图   Android作为一个移动设备的平台,其软件层次结构包括了一个操作系统(OS),中间件(MiddleWare)和应用程序(Application)。根据Andro...
  • wumingqian_137229
  • wumingqian_137229
  • 2016年10月19日 14:01
  • 3284

深入分析MFC之GDI原理透析

为什么会使用GDI呢? 首先要理解一般显示器,是将要显示的内容存放在显存中,framebuffer就是用来存储显示的数据,由DMA自动读取数据将其显示在窗口中,而这里显示的只是一个个的像素点。通常是先...
  • comwise
  • comwise
  • 2013年12月06日 16:01
  • 1757

mfc层次结构

  • 2012年03月01日 10:55
  • 4.35MB
  • 下载

MFC基础类层次结构及其运行机制

1、从根类Cobject层层派生出绝大多数MFC中的类,其层次结构为下图所示 2、从类CComdTarget层层派生出绝大多数MFC中的类,其层次结构为下图所示 3、MFC中重点类 CO...
  • tfygg
  • tfygg
  • 2016年03月14日 17:18
  • 1237

2.MFC简单的层次结构分析

我们在创建一个MFC项目的时候,在Application类的实现文件中,往往有一个 xxxApplication theApp, 和一个重写的 InitInstance() 函数 如果下代码: //...
  • lingdi2000
  • lingdi2000
  • 2015年06月09日 09:37
  • 543

MFC基础类及其层次结构

从类CComdTarget层层派生出绝大多数MFC中的类,其层次结构为下图所示. 从根类Cobject层层派生出绝大多数MFC中的类,其层次结构为下图所示. MFC中重点类...
  • qq920020796
  • qq920020796
  • 2016年01月04日 14:55
  • 300

MFC——基础类及其层次结构

从类CComdTarget层层派生出绝大多数MFC中的类,其层次结构为下图所示. 从根类Cobject层层派生出绝大多数MFC中的类,其层次结构为下图所示. MFC中重点类...
  • perfectguyipeng
  • perfectguyipeng
  • 2017年11月28日 09:50
  • 94

JDBC层次结构和基本构成

本文转载自http://blog.csdn.net/luanlouis/article/details/30060755,感谢分享 前言        最近在研究Mybatis...
  • wl044090432
  • wl044090432
  • 2017年03月07日 16:45
  • 803

老调重弹:JDBC系列 之 <JDBC层次结构和基本构成>

前言        最近在研究Mybatis框架,由于该框架基于JDBC,想要很好地理解和学习Mybatis,必须要对JDBC有较深入的了解。所以便把JDBC 这个东东翻出来,老调重弹,好好...
  • erlian1992
  • erlian1992
  • 2017年04月18日 22:59
  • 645
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC基本层次结构
举报原因:
原因补充:

(最多只允许输入30个字)