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

时间:2012-05-05 10:11:42

标签: c++ windows user-interface mfc

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

This article有关于MFC应用程序启动时会发生什么情况的其他详细信息。