MFC多文档在CFileView中获取文档指针
无效的做法
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
ASSERT(pMainFrame);
CDocument* pDoc = pMainFrame->GetActiveDocument();
直接调用pMainFrame
的GetActiveDocument
获得文档指针pDoc
为空,因为它与文档并不是直接关联的。只有先找到ChildFrame
,再获取pDoc
。
这种做法仅在单文档程序中才正确。
正确的做法
做法1
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
ASSERT(pMainFrame);
CMDIChildWnd* pChild = (CMDIChildWnd*)pMainFrame->GetActiveFrame();
CDocument* pDoc = pChild->GetActiveDocument();
做法2
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
ASSERT(pMainFrame);
CMDIChildWnd* pChild = (CMDIChildWnd*)pMainFrame->GetActiveFrame();
CView* pView = pChild->GetActiveView();
CDocument* pDoc = pView->GetDocument();