假设我想在MFC MDI应用程序中的doc类中访问特定视图(如果已经打开)。视图当前是否有效。如果我可以假设视图始终处于活动状态,我可以按照此说明进行操作
http://support.microsoft.com/kb/108587
但视图也可以是非活动的。有没有办法做到这一点?
答案 0 :(得分:7)
有更短的方法可以做到这一点,但这是直截了当的方式。假设以下代码是CMainFrame类中的菜单处理程序:
for( POSITION pos = AfxGetApp()->GetFirstDocTemplatePosition(); pos != NULL; )
{
CDocTemplate* pTempl = AfxGetApp()->GetNextDocTemplate( pos );
for( POSITION pos1 = pTempl->GetFirstDocPosition(); pos1!= NULL; )
{
CDocument* pDoc = pTempl->GetNextDoc( pos1 );
for( POSITION pos2 = pDoc->GetFirstViewPosition(); pos2 != NULL; )
{
CView* pView = pDoc->GetNextView( pos2 );
if( pView->IsKindOf( RUNTIME_CLASS(...) ) )
{
// Do what you need with the view...
}
}
}
}
您基本上必须获取指向模板的指针,查看与其关联的CD文档,并为每个CD文档遍历附加到文档的所有视图。
如果您只使用一个模板,一个文档和多个视图附加,您可以将模板保存在CMainFrame类中,并通过调用AfxGetApp() - > m_pTemplate来更快地获得它。
MFC在某些方面很时髦,但如果需要,它可以让你进入Doc / View架构的任何部分。
希望这能指出你正确的方向。