MFC框架如何获取全局Application对象的句柄?

时间:2010-11-12 12:09:53

标签: mfc

过去几天我有一个问题:

在MFC中,我们创建一个派生自CWinApp的应用程序对象。我们全局创建这个对象。因此,MFC框架将使用此对象来启动应用程序。

但我不知道框架的工作如何了解我的全局对象。

请解释一下MFC了解应用程序对象的内部机制。

2 个答案:

答案 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的定义和声明。