解决疑惑:afxGetApp () 获得theApp 的指针的过程
基本上是这样的
一,定义
class ModuleState
{
public:
WinApp* m_pcurrentApp;
HINSTANCE m_hCurrentInst;
};
二,生成全局对象
ModuleState state;(这个对象应该比theapp 生成的早点。自己这样认为的,没做实验验证迟了的后果)
三 全局函数 GblGetModuleState (类似afxGetModuleState 或者 AfxGetApp. 自己写的么,就不使afx 了!)
ModuleState* GblGetModuleState()
{
return &state;
}
四, 在WinApp的构造函数中,初始化state的m_pcurrentApp
WinApp::WinApp()
{
GblGetModuleState()->m_pcurrentApp = this;
}
五,为了验证是否是自己的Myapp:public Winapp生成的 theapp
使用两个虚函数 winapp::Instance(){cout<<"in winapp";}
myapp::Instance(){cout<<"in myapp";}
int main()
{
WinApp* pApp = GblGetModuleState()->m_pcurrentApp ;
pApp->InitInstance ();
int c;
scanf("%d",&c); //完全是为了让程序停下来,看看输出的结果
return 0;
}
结论 : 1,mfc 程序中当然不可能只有一个 theapp 全局对象,我们关注的太紧密,自己就短视了。
2,这完全是自己做的一个 小实验。类似 mfc 的封装过程 。
附上实验代码 (本来相传附件的,没找到在哪操作。知道的给我说说)