VC++.NET 技术内幕学习三

原创 2012年03月31日 13:26:43

第十五章、文档与视图的分离

CView::GetDocument();非虚函数。返回的是指向文档的指针。

当MFC产生CView的派生类时,它同时也创建类型安全的GetDocument函数,该函数返回一个指向派生文档类的对象的指针。当在视图类中遇到对GetDocument函数的调用时,调用的是CMyView::GetDocument(返回的是CMyDocument*),因此,你不用再将它返回的指针强制转换为指向派生文档类的指针。但由于CView::GetDocument();非虚函数,像下面的函数总是调用基类的GetDocument函数(返回CDocument*)。

pView->GetDocument();//CView *pView;返回(CDocument*)

CDocument::UpdateAllViews()函数更新视图所显示的数据。

         在派生文档类中调用此函数时,第一个参数pSender为NULL,在派生视图类中调用此函数时pSender参数设置为如下:GetDocument->UpdateAllViews(this);非空参数使得应用程序框架不再通知当前的视图。

CView::OnUpdate()为虚函数。

UpdateAllViews()函数会调用此函数,pSender参数为空时会,文档的所有其他视图的OnUpdate函数都会被调用。也可在派生视图类中直接调用OnUpdate()函数,来更新当前视图。可以利用OnUpdate()函数使视图的某部分无效,以便触发视图的OnDraw函数。

         简单的文档-视图环境中事件发生的次序:

应用程序启动     

CMyDocument对象被创建

CMyView对象被创建

视图窗口被创建

CMyView::OnCreate函数被调用(如果被映射了的话)

CMyDocument::OnNewDocument函数被调用

CMyView::OnInitialUpdate函数被调用

         视图窗口被初始化

         视图窗口无效

         CMyView::OnDraw函数被调用

用户编辑数据

CMyView的函数对CMyDocument数据成员进行更新

用户退出程序

CMyView对象被删除

CMyDocument对象被删除

 

 

          CFormView类具有许多无模式对话框的特点。像CDialog的派生类一样,CFormView的派生类也和相应的对话框资源相联系。CFormView对象直接从它的控件中接收通知消息,但是从应用程序框架接收命令消息。应用框架的这种命令处理能力很清楚地把CFormView和CDialog区分开来。

         如果使用对话框编辑器为窗口视图创建对话框的话,就必须在Dialog类中指定如下项:

Style= Child;Border = None;Visible =unchecked/false;

     

                    

        复杂的文档-视图环境中事件发生的次序:

应用程序启动     

CMyDocument对象被构造

CMyView对象被构造

其他视图对象被构造

视图窗口被创建

CMyView::OnCreate函数被调用(如果被映射了的话)

CMyDocument::OnNewDocument函数被调用

CView::OnInitialUpdate被调用

CMyView::OnUpdate函数被调用

         视图窗口被初始化

用户执行视图命令

CMyView函数更新CMyDocument的数据成员

CDocument::UpdateAllViews被调用

         其他视图的OnUpdate函数被调用

用户执行文档命令

CMyDocument函数对数据成员进行更新

CMyDocument::UpdateAllViews被调用

         CMyView::OnUpdate函数被调用

         其他视图的OnUpdate函数被调用

用户退出程序

视图对象被删除

CMyDocument对象被删除

相关文章推荐

VC++.NET技术内幕学习一

第五章消息映射 遇到的问题: 一、映射模式。 坐标使用的经验规则: 1、  可以认为CDC的所有成员函数都以逻辑坐标作为其参数。 2、  可以认为CWnd的成员函数都以设备坐标作为其参数。 ...

vc++.net技术内幕

  • 2013年03月25日 17:09
  • 35.54MB
  • 下载

VC++.net 技术内幕6 源码 part11

  • 2008年08月20日 17:58
  • 977KB
  • 下载

VC++技术内幕』学习笔记(10)

第十篇:模式对话框和通用控件(下)     大家好,雷神由于出差在外,所以笔记今天才写出抱歉。不知道大家有没有做上篇提到的计算器,计算器对雷神来说可是经典的程序,学VB先搞了计算器,学VC也搞了...

VC++.net 技术内幕6 源码part9

  • 2008年08月20日 17:50
  • 977KB
  • 下载

VC++.net 技术内幕6 源码 part3

  • 2008年08月20日 17:27
  • 977KB
  • 下载

VC++调用webservice (不使用.NET的托管技术)

正在看着AV(AreCont)SDK的时候,老大突然让我转到soap上,原因是刚进公司的我,第一项任务便是研究ONVIF(so many specifications),当然主要的还是看core ...

VC++.net 技术内幕6 源码 part8

  • 2008年08月20日 17:39
  • 977KB
  • 下载

VC++.net 技术内幕6 源码 part7

  • 2008年08月20日 17:34
  • 977KB
  • 下载

(转)VC++技术内幕(第四版)笔记--…

CRect rectClient;         GetClientRect(rectClient);           pDC->SetMapMode(MM_ANISOTROPIC); ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC++.NET 技术内幕学习三
举报原因:
原因补充:

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