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

Oha*_*esh 5 c++ windows user-interface mfc

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

int WinMain()
{
   CMainFrame* pMainFrame = new CMainFrame;
   // etc ...
}
Run Code Online (Sandbox Code Playgroud)

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

Fré*_*idi 4

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

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

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

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