получить существующее, но неактивное представление в MFC - PullRequest
3 голосов
/ 15 марта 2012

Скажем, я хочу получить доступ к определенному представлению в классе документа в приложении MFC MDI, если оно уже открыто.Представление может быть в данный момент активным или нет.Если я могу предположить, что представление всегда активно, я могу следовать этой инструкции

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

, но представление также может быть неактивным.Есть ли способ сделать это?

1 Ответ

7 голосов
/ 16 марта 2012

Есть более короткие способы сделать это, но вот прямой путь. Предположим, что следующий код является обработчиком меню в вашем классе 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, если вам нужно.

Надеюсь, это направит вас в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...