为什么我的派生 CWinApp 的构造函数应该在 main 函数启动之前被调用?
为什么不能是这样的:
int WinMain()
{
CMainFrame* pMainFrame = new CMainFrame;
// etc ...
}
我正在寻找迫使这种行为的技术原因。
编辑:
为了更清楚 - 如果我使用没有 MFC 的 win32 API,主窗口是在 WinMain 内创建的,那么有什么区别?
为什么我的派生 CWinApp 的构造函数应该在 main 函数启动之前被调用?
为什么不能是这样的:
int WinMain()
{
CMainFrame* pMainFrame = new CMainFrame;
// etc ...
}
我正在寻找迫使这种行为的技术原因。
编辑:
为了更清楚 - 如果我使用没有 MFC 的 win32 API,主窗口是在 WinMain 内创建的,那么有什么区别?
基本上,这是因为 MFC 设计者决定在库本身中提供应用程序入口点(WinMain(),而不是main()
),因此用户不必编写一个。
然后将应用程序的初始化和终止逻辑重新定位到用户提供的衍生单例实例的InitInstance()
和方法。这个实例必须在运行之前存在,因为它调用上述方法(并进入消息循环)并使用它来存储状态(就像它接收的参数一样)。ExitInstance()
CWinApp
WinMain()
Run()
nCmdShow
在全局范围内定义CWinApp
-derived 实例是确保它在运行时确实存在的简单方法WinMain()
。
本文提供了有关 MFC 应用程序启动时幕后发生的情况的更多详细信息。