2013-05-14 1 views
0

Я работаю над приложением MDI, которое имеет браузер объектов (CClassView), который должен изменить то, что он отображает, на основе того, что «документ» активен.C++ MFC MDI как изменить отображение вида на основе активного документа

PS: Ни один из моих поисков не работал.

ответ

0

Это не то, что я ожидал, но вот одно из возможных решений:

http://forums.codeguru.com/showthread.php?473808-MFC-Doc-View-How-to-get-the-active-document-anywhere-in-my-application

Q: Как получить активный документ в любом месте в моем приложении?

A: Существует несколько методов: нужно сначала открыть активный кадр , затем вызвать CFrameWnd :: GetActiveDocument. ... В MDI-приложениях мы должны дополнительно получить активный дочерний фрейм MDI.

CDocument* GetMDIActiveDocument() 
{ 
    CDocument* pDoc = NULL; 

    CWnd* pWndMain = AfxGetMainWnd(); 
    ASSERT(pWndMain); 
    ASSERT(pWndMain->IsKindOf(RUNTIME_CLASS(CMDIFrameWnd))); // Not an MDI app. 

    CFrameWnd* pFrame = ((CMDIFrameWnd*)pWndMain)->MDIGetActive(); 
    if(NULL != pFrame) 
    { 
     pDoc = pFrame->GetActiveDocument(); // get the active document 
    } 
    return pDoc; 
} 

Этот пример кода может предложить другие (возможно, даже лучше) альтернативы:

http://msdn.microsoft.com/en-us/library/cstcs513%28v=vs.90%29.aspx

+0

Там только одна проблема. В моем проекте нет класса 'CDocument', о котором я знаю. У меня есть 'CMyApp: CWinAppEx',' CChildFrame: CMDIChildWndEx' и 'CMainFrame: CMDIFrameWndEx'. Есть что-то, что мне не хватает? –