Chinaunix首页 | 论坛 | 博客
  • 博客访问: 495050
  • 博文数量: 96
  • 博客积分: 6046
  • 博客等级: 准将
  • 技术积分: 908
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-07 22:40
文章分类

全部博文(96)

文章存档

2009年(12)

2008年(18)

2007年(45)

2006年(21)

我的朋友

分类: C/C++

2007-03-10 13:06:20

MFC对象的创建

前面几章介绍了MFC的核心概念和思想,即介绍了MFC对Windows对象的封装方法和特点;MFC对象的动态创建、序列化;MFC消息映射机制。

现在,考查MFC的应用程序结构体系,即以文档-视为核心的编程模式。学习本章,应该弄清楚以下问题:

MFC中诸多MFC对象的关系:应用程序对象,文档对象,边框窗口对象,文档边框窗口对象,视对象,文档模板对象等。

MFC对象的创建和销毁:由什么对象创建或销毁什么对象,何时创建,何时销毁?

MFC提供了那些接口来支持其编程模式?

  1. MFC对象的关系

    1. 创建关系

      这里讨论应用程序、文档模板、边框窗口、视、文档等的创建关系。图5-1大略地表示了创建顺序,但表5-1更直接地显示了创建与被创建的关系。

       

      表5-1 MFC对象的创建关系

      创建者

      被创建的对象

      应用程序对象

      文档模板

      文档模板

      文档

      文档模板

      边框窗口

      边框窗口

       

    2. 交互作用关系

    应用程序对象有一个文档模板列表,存放一个或多个文档模板对象;文档模板对象有一个打开文档列表,存放一个或多个已经打开的文档对象;文档对象有一个视列表,存放显示该文档数据的一个或多个视对象;还有一个指针指向创建该文档的文档模板对象;视有一个指向其关联文档的指针,视是一个子窗口,其父窗口是边框窗口(或者文档边框窗口);文档边框窗口有一个指向其当前活动视的指针;文档边框窗口是边框窗口的子窗口。

    Windows 管理所有已经打开的窗口,把消息或事件发送给目标窗口。通常,命令消息发送给主边框窗口。

    图5-2大略地表示了上述关系:

    MFC提供了一些函数来维护这些关系。

    表5-2列出了从一个对象得到相关对象的方法。

    表5-2 从一个对象得到另一个对象的方法

    本对象

    要得到的对象

    使用的成员函数

    CDocument对象

    视列表

    GetFirstViewPosition

    GetNextView

    文档模板

    GetDocTemplate

    CView对象

    文档对象

    GetDocument

    边框窗口

    GetParentFrame

    CMDIChildWnd或

    CFrameWnd对象

    活动视

    GetActiveView

    活动视的文档

    GetActiveDocument

    CMDIFrameWnd对象

    活动文档边框窗口

    MDIGetActive

     

    表5-3 从一个对象通知另一个对象的方法:

    本对象

    要通知的对象/动作

    使用的成员函数

    CView对象

    通知文档更新所有视

    CDocument::UpdateAllViews

    CDocument对象

    更新一个视

    CView::OnUpdate

    CFrameWnd或

    CMDIFrameWnd对象

    通知一个视为活动视

    CView::OnActivateView

    设置一个视为活动视

    SetActivateView

    可以通过表5-2得到相关对象,再调用表5-3中相应的函数。例如:视在接受了新数据或者数据被修改之后,使用表5-2中的函数GetDocument得到关联文档对象,然后调用表5-3中的文档函数UpdateAllViews更新其他和文档对象关联的视。

    在表5-2和表5-3中,CView对象指CView或派生类的实例;成员函数列中如果没有指定类属,就是第一列对象的类的成员函数。

  2. MFC提供的接口

    MFC编程就是把一些应用程序特有的东西填入MFC框架。MFC提供了两种填入的方法:一种就是使用前一章论述的消息映射,消息映射给应用程序的各种对象处理各种消息的机会;另一种就是使用虚拟函数,MFC在实现许多功能或者处理消息、事件的过程中,调用了虚拟函数来完成一些任务,这样就给了派生类覆盖这些虚拟函数实现特定处理的机会。

    下面两节将列出两类接口,有两个目的:一是为了让读者获得整体印象,二是后文将涉及到或者讨论其中的许多函数时,不显得突兀。

    1. 虚拟函数接口

      几乎每一个MFC类都定义和使用了虚拟成员函数,程序员可以在派生类中覆盖它们。一般,MFC提供了这些函数的缺省实现,所以覆盖函数应该调用基类的实现。这里给出一个MFC常用虚拟函数的总览表(见表5-4),更详细的信息或它们的缺省实现动作参见MFC文档。由于基类的虚拟函数被派生类继承,所以在派生类中不作重复说明。

      覆盖基类的虚拟函数可以通过ClassWizard进行,不过,并非所有的函数都可以这样,有的必须手工加入函数声明和实现。

      表5-4 常见MFC类的虚拟函数接口

      虚拟函数

      覆盖的目的和功能

      CCmdTarget

      OnCmdMsg

      发送、派发命令消息

      OnFinalRelease

      OLE用途,引用为0时作清理工作

      CWinThread

      ExitInstance

      在线程退出时作清理工作

      InitInstance

      在线程开始时作初始化

      OnIdle

      执行thread-specific idle-time处理

      PreTranslateMessage

      在消息送给Windows函数TranslateMessage and DispatchMessage.之前进行消息过滤

      IsIdleMessage

      检查是否是某个特别的消息

      ProcessWndProcException

      截获线程消息/命令处理中的例外

      ProcessMessageFilter

      线程消息过滤

      Run

      实现线程特定的消息循环

      CWinApp

      HideApplication

      关闭所有的窗口之前隐藏应用程序

      CloseAllDocument

      退出程序之前关闭所有文档

      转下页

       

      续表

       

      SaveModifiedDocument

      框架窗口关闭时用来保存文档

      DoMessageBox

      实现客户化的messagebox

      DoWaitCursor

      关闭或打开等待光标

      OnDDeCommand

      响应DDE命令

      WinHelp

      调用WinHelp函数

      CWnd

      WindowProc

      提供一个窗口过程

      DefWindowProc

      为应用程序不处理的消息提供缺省处理

      PostNcDestroy

      在窗口销毁之后被消息处理函数OnNcDestroy调用

      OnNotify

      处理通知消息WM_NOTIFY

      OnChildNotify

      父窗口调用它给控制子窗口一个机会来处理通知反射消息

      DoDataExchange

      Updata调用它来进行对话框数据交换和验证

      CFrameWnd

      GetMessageBar

      返回一个指向框架窗口的状态条的指针

      OnCreateClient

      创建框架的客户窗口

      OnSetPreviewMode

      设置程序的主框架窗口进入或退出打印预览模式

      NegotiateBorderSpace

      协调边框窗口的边框空间的大小(OLE用途)

      CMDIFrameWnd

      CreateClient

      创建CMDIFrameWnd的MDICLIENT窗,被CWnd的消息处理函数OnCreate调用.

      转下页

       

      续表

       

      GetWindowMenuPopup

      返回窗口的弹出式菜单

      CDialog

      OnInitDialog

      对话框窗口的初始化

      OnSetFont

阅读(1327) | 评论(0) | 转发(0) |
0

上一篇:详细分析bmp

下一篇:MFC对象的创建 2

给主人留下些什么吧!~~