在CMainFrame 中如何获取框架产生的 文档类,视图类指针

解决方案 »

  1.   

    CMDIFrameWnd *pFrame = 
                 (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;// Get the active MDI child window.
    CMDIChildWnd *pChild = 
                 (CMDIChildWnd *) pFrame->GetActiveFrame();// or CMDIChildWnd *pChild = pFrame->MDIGetActive();// Get the active view attached to the active MDI child
    // window.
    CMyView *pView = (CMyView *) pChild->GetActiveView();
      

  2.   

    GetActiveDocument Returns the active CDocument object. 
    GetActiveFrame Returns the active CFrameWnd object. 
    GetActiveView Returns the active CView object. 
      

  3.   

    8.4访问当前活动视图和活动文档 对于SDI程序,主框架窗口就是文档框窗,可以采用以下方法取得当前文档和视图:取得活动文档:CMyDocument* pDoc;pDoc=(CMyDocument*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveDocument();或pDoc=(CMyDocument*)((CFrameWnd*)AfxGetMainWnd());这两者是等效的。取得活动视图:CMyView* pView;pView=(CMyView*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveView();对于MDI程序,由于子窗口才是文档框窗,因此首先要用GetActiveFrame()取得活动子框架窗口,然后通过该子窗口获取活动文档和视图:CMDIChildWnd* pChild=(CMDIChildWnd*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveFrame();取得活动文档:CMyDocument* pDoc=pChild->GetActiveDocument();CMyView* pView=(CMyView*)pChild->GetActiveView();可以把上述函数片段做成静态成员函数,比如:static CMyDocument::GetCurrentDoc(){CMDIChildWnd* pChild=(CMDIChildWnd*)((CFrameWnd*)AfxGetApp()- >m_pMainWnd)->GetActiveFrame();CMyDocument* pDoc=pChild->GetActiveDocument();}这样就可以通过以下方式取得活动文档(或视图):CMyDocument::GetCurrentDoc();
      

  4.   

    Frame有成员变量CView* m_pViewActive;
           成员函数:CDocument* GetActiveDoucument() {return pView->GetDoucment};
    CView 中:CDocument* m_pDocumnet;指向Document
             GetDocument(){return m_pDocument}是CView中获得Documnet指针的函数
             GetParentFrame()函数指向Frame
    CDocumnet中有CPtrList m_viewList;指向各个View的一个链表指针