在 MFC 中,为什么我需要创建 CWinApp 的全局实例

In MFC why do I need to create a global instance of CWinApp?

本文关键字:CWinApp 创建 全局 实例 MFC 为什么      更新时间:2023-10-16

为什么在主函数启动之前应该调用我的派生 CWinApp 的构造函数?
为什么不能是这样的:

int WinMain()
{
   CMainFrame* pMainFrame = new CMainFrame;
   // etc ...
}

我正在寻找强制这种行为的技术原因。
编辑:
更清楚的是 - 如果我使用没有 MFC 的 win32 API,主窗口是在 WinMain 中创建的,那么有什么区别?

基本上,这是因为 MFC 设计人员决定在库本身中提供应用程序入口点(WinMain(),而不是main()),因此用户不必编写一个。

然后,应用程序的初始化和终止逻辑将重新定位到用户提供的CWinApp派生的单一实例实例的InitInstance()ExitInstance()方法。此实例必须在WinMain()运行之前存在,因为它调用上述方法(并Run()进入消息循环)并使用它来存储状态(如它接收的nCmdShow参数)。

在全局范围内定义 CWinApp 派生实例是确保它在运行时确实存在的WinMain()简单方法。

本文提供了有关 MFC 应用程序启动时后台发生的情况的其他详细信息。