MFC应用程序之视图、文档、框架、应用程序类对象间的相互引用及调用
新建MFC应用程序Draw
1.视图类对文档类的调用
视图类对象的作用是在客户区显示文档类对象的内容,两者之间的调用函数最为常用。在视图类对象中,通过GetDocument()函数得到文档类对象的指针。在视图类CDrawView中可以找到GetDocument()函数。
Public:
CDrawDoc * GetDoucument();
在实现文件 drawview.cpp 中,有GetDocument()函数的实现代码:
CDrawDoc * CDrawView::GetDocument()
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDrawDoc)));
Return (CDrawDoc*) m_pDocument;
}
GetDocument() 函数的作用就是得到当前视图类对象所属的文档类对象的指针。在视图类CDrawView的成员函数中,可以通过以下代码调用GetDocument()函数以得到当前文档类对象指针。
CDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
得到指向当前文档类对象的指针pDoc后,与使用普通的C++类的指针一样,可以调用文档类的成员变量和成员函数(只能调用共有型的)。
2.在框架类中获得当前的文档类和视图类对象指针。
在主框架类CMainFrame 和子框架类CChildFrame 中,都可以利用基类的函数,得到指向当前活动的文档类对象和视图类对象的指针。
下面的代码可以获得指向当前活动的文档类对象和视图类对象的指针。
CDrawDoc * pDoc = (CDrawDco* )GetActiveDocument();
CDrawDco * pView =(CDrawView *)GetActiveView();
3.获得应用程序类对象的指针
在MFC应用程序执行过程中,自始至终存在一个应用类对象,可以在MFC派生类中或非MFC派生类中,通过全局API函数AfxGetApp()得到应用类对象的指针。例如,可以在应用程序Draw中的任何位置,通过以下代码获得指向应用类对象的指针。
CDrawApp * pWindApp = (CDrawApp * )AfxGetApp();
4.从应用类对象中获得主框架类对象的指针
通过MFC用用程序类的应用类对象,可以获得指向当前系统的主框架类对象的指针。在应用类CWinApp 中有一个数据成员m_pMainWnd,这个数据成员保存了指向应用程序类主框架类对象的指针,通过它可以获得指向主框架类对象的指针。以下代码可以获得指向主框架类对象的指针。
CMainFrame * pFrame =(CMainFrame *)(AfxGetApp()->m_pMainWnd);