过去几天我有一个问题:
在MFC中,我们创建一个派生自CWinApp
的应用程序对象。我们全局创建这个对象。因此,MFC框架将使用此对象来启动应用程序。
但我不知道框架的工作如何了解我的全局对象。
请解释一下MFC了解应用程序对象的内部机制。
答案 0 :(得分:1)
来自MSDN:
每个使用该应用程序的应用程序 Microsoft基础类只能 包含一个派生自的对象 CWinApp的。构造该对象 当其他C ++全局对象是 已建成并已有 当Windows调用WinMain时 功能,由...提供 Microsoft基础类库。 声明派生的CWinApp对象 全球层面。
基本上因为你的CWinApp对象是一个全局变量,所以当应用程序到达WinMain时,它已经实例化了你的CWinApp对象。因为只能有一个CWinApp对象,所以它知道这是一个。
答案 1 :(得分:1)
在调试示例MFC应用程序之后,我了解了框架如何知道应用程序对象。
应用程序对象是全局的,并且继承自CWinApp
。由于对象是全局的,因此在调用WinMain
之前构造此对象。在构造派生对象时,调用CWinApp
类构造函数;此时框架捕获句柄:
pModuleState->m_pCurrentWinApp = this;
以上行是从MFC CWinApp::CWinApp(LPCTSTR lpszAppName)
构造函数复制的。
如果您想了解更多详细信息,请转到类CWinApp
的定义和声明。