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 技术内幕学习四

第十六章、读和写文档 知识点: 序列化流程 持续文档对象 Serialize CArchive归档对象 CFile对象 磁盘 你在Serialize函数中需要做的就是,将数据存到归档对...
  • windows_nt
  • windows_nt
  • 2012年03月31日 13:30
  • 622

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

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

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

第十一章、windows消息处理和多线程编程           Windows提供了两种线程:辅助线程和用户界面线程。用户界面线程有窗口,因此它有自己的消息循环,辅助线程没有窗口,没有自己的消息循...
  • windows_nt
  • windows_nt
  • 2012年03月31日 13:19
  • 667

Android技术内幕系统卷--读书笔记(一)

Android系统架构由下到上分为五个大的层次,分别为:     1 Linux内核层(底层OS)---负责进程管理,内存管理,设备管理     2 硬件抽象层(HAL)----用户空间设备驱动层...
  • littlek_yang
  • littlek_yang
  • 2013年05月27日 18:11
  • 587

跟我一起学习mysql技术内幕(第五版)吧!(学习日志)

学习日记 mysql技术内幕第五版
  • CCyutaotao
  • CCyutaotao
  • 2016年03月22日 23:54
  • 3870

《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

索引: 一、SQL Server的体系结构 二、查询 三、表表达式 四、集合运算 五、透视、逆透视及分组 六、数据修改 七、事务和并发 八、可编程对象 一、SQL Server体系结构 1.1 数据...
  • mss359681091
  • mss359681091
  • 2017年03月22日 11:21
  • 577

VC++ .Net 实例学习

VC++.NET中添加由C#编译的DLL引用的方法 http://blog.csdn.net/much0726/article/details/4986627 关于VC.NET的资料网络上...
  • bcbobo21cn
  • bcbobo21cn
  • 2017年06月18日 16:55
  • 832

跟我一起学习MySQL技术内幕(第五版):(第一章学习日记6)

1.4.9.6 -1.4.9.10
  • CCyutaotao
  • CCyutaotao
  • 2016年04月03日 01:57
  • 648

MySQL技术内幕InnoDB存储引擎学习笔记(第二章)

第二章 InnoDB存储引擎 一、实验环境 宿主机系统:windows7 虚拟机:OracleVMVirtualBox Linux:ubuntukylin-14.04.1-amd64.iso jdk:...
  • lanonola
  • lanonola
  • 2016年07月14日 20:19
  • 1252

MySQL技术内幕系列 电子书 作者: 姜承尧

下载地址
  • Cloud_Strife_1985
  • Cloud_Strife_1985
  • 2017年07月15日 17:30
  • 722
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC++.NET 技术内幕学习三
举报原因:
原因补充:

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