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

来源:互联网 发布:excel数据双引号 编辑:程序博客网 时间:2024/06/05 02:12

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

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对象被删除