作者最近在开发多文档视图程序,需要在视图间切换时处理激活视图数据的更新,开始用OnActivateView虚函数,但其在视图内容更新后触发,不符合要求,查找资料找到如下解决方法:
1、在CChildFrame类中添加WM_MDIACTIVATE消息处理即OnMDIActivate函数;
2、 在函数中添加如下代码:
if(bActivate)
{
CDocument * pDoc = GetActiveDocument();
POSITION pos = pDoc->GetFirstViewPosition();
CView* pView = NULL;
while(pos != NULL)
{
pView = pDoc->GetNextView(pos);
if(!pView->IsTopParentActive()) // 视图是否处于活动状态
continue;
if(pView->IsKindOf( RUNTIME_CLASS(CPrintDocumentsView) ))
{
::PostMessage(pView->m_hWnd, WM_SAVEDATABASE, 3, NULL); // 向活动状态的视图发送消息
}
}
}
当激活视图时,就会向视图发送自定义消息,进行相应处理。