//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();
}