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