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类组织结构图

学习MFC的朋友大多数应该都比较熟悉下面这幅类继承关系图,他出自侯俊杰《深入浅出MFC》,微软网站上也给出过MFC Hierarchy Chart,贴出来一起学习。...
  • bflong
  • bflong
  • 2015年08月06日 14:25
  • 1586

深入浅出MFC文档/视图架构之基本概念

深入浅出MFC文档/视图架构之基本概念 引言   MFC引入了"文档/视图"结构的概念,理解这个结构是编写基于MFC编写复杂Visual C++程序的关键。"文档/视图"中主要...

MFC 控件显示层次调整(叠放次序)和绘制控制问题

转载自:  http://www.cnblogs.com/oyjj/archive/2011/01/09/1931291.html 使用MFC的设计器,想调整控件的叠放次序,怎么也找...

Windows 窗口层次关系

相信在Windows 下面编程的很多兄弟们都不是很清楚Windows 中窗口的层次关系是怎么样的,这个东西很久已经研究过一下,后来又忘记了,今天又一次遇到了这个问题,所以便整理一下。下面就说说Wind...

三、MFC框架结构简介

1.   利用应用程序向导创建MFC框架程序:        a. AppWizard是一个生成基础源代码的向导工具;        b. 可以利用AppWizard生成一个具有MFC基本框架的源代码...

MFC框架的一种理解方法

MFC的水很深,如果你想搞清楚所有的的细枝末节,恐怕我这里就帮不到你了,需要看侯捷的《深入浅出MFC》之类的书籍,一般而言,我们没必要知道所有的底层技术,但是知道一点基本的框架,对于编程还是很有用的。...
  • q__y__L
  • q__y__L
  • 2016年04月27日 00:25
  • 1802

mfc层次结构

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

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

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

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

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

JDBC层次结构和基本构成

本文转载自http://blog.csdn.net/luanlouis/article/details/30060755,感谢分享 前言        最近在研究Mybatis...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC基本层次结构
举报原因:
原因补充:

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