在MFC中获取现有但非活动的视图

Tae*_*hin 3 mfc view

假设我想在MFC MDI应用程序中的doc类中访问特定视图(如果它已经打开).视图当前是否有效.如果我可以假设视图始终处于活动状态,我可以按照此说明操作

http://support.microsoft.com/kb/108587

但视图也可以是非活动的.有没有办法做到这一点?

Edd*_*Paz 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...
        }
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

您基本上必须获得指向模板的指针,查看与其关联的CD文档,并为每个CD文档遍历附加到文档的所有视图.

如果您只使用一个模板,一个文档和多个附加视图,则可以将模板保存在CMainFrame类中,并通过调用AfxGetApp() - > m_pTemplate来更快地获得它.

MFC在某些方面很时髦,但如果您需要,它可以让您访问Doc/View架构的任何部分.

希望这能指出你正确的方向.