//MFC.h #include <iostream> using namespace std; class CObject { public: CObject() { cout<<"CObject Constructor"<<endl; } ~CObject() { cout<<"CObject Destructor"<<endl; } }; class CCmdTarget : public CObject { public: CCmdTarget() { cout<<"CCmdtarget Constructor"<<endl; } ~CCmdTarget() { cout<<"CCmdTarget Destructor"<<endl; } }; class CWinThread : public CCmdTarget { public: CWinThread() { cout<<"CWinThread Constructor"<<endl; } ~CWinThread() { cout<<"CWinThread Destructor"<<endl; } }; class CWinApp : public CWinThread { public: CWinApp *m_pCurrentWinApp;//************** public: CWinApp() { m_pCurrentWinApp = this; cout<<"CWinApp Constructor"<<endl; } ~CWinApp() { cout<<"CWinApp Destructor"<<endl; } }; class CWnd : public CCmdTarget { public: CWnd() { cout<<"CWnd Constructor"<<endl; } ~CWnd() { cout<<"CWnd Destructor"<<endl; } }; class CView : public CWnd { public: CView() { cout<<"CView Constructor"<<endl; } ~CView() { cout<<"CView Destructor"<<endl; } }; class CFrameWnd : public CWnd { public: CFrameWnd() { cout<<"CFrameWnd Constructor"<<endl; } ~CFrameWnd() { cout<<"CFrameWnd Destructor"<<endl; } }; class CDocument : public CCmdTarget { public: CDocument() { cout<<"CDocument Constructor"<<endl; } ~CDocument() { cout<<"CDocument Destructor"<<endl; } }; //global function CWinApp* AfxGetApp(); //MY.h #include <iostream> #include "MFC.h" using namespace std; class CMyWinApp : public CWinApp { public: CMyWinApp() { cout<<"CMyWinApp Constructor"<<endl; } ~CMyWinApp() { cout<<"CMyWinApp Destructor"<<endl; } }; class CMyFrameWnd : public CFrameWnd { public: CMyFrameWnd() { cout<<"CMyFrameWnd Constructor"<<endl; } ~CMyFrameWnd() { cout<<"CMyFrameWnd Destructor"<<endl; } }; //MFC.cpp #include "MY.h" extern CMyWinApp theApp; CWinApp* AfxGetApp() { return theApp.m_pCurrentWinApp; } //MY.cpp #include "MY.h" CMyWinApp theApp;//global object void main() { CWinApp* pApp = AfxGetApp(); }