MFC中(比如基于对话框的应用程序),消息循环是在InitInstance()函数执行完以后才进入的吗?
我看到书上和网上都这么说:在InitInstance()函数退出后就会进入线程的消息循环。这里说的消息循环应该就是CWinApp::Run吧(因为消息循环就封装在Run函...
我看到书上和网上都这么说:在InitInstance()函数退出后就会进入线程的消息循环。这里说的消息循环应该就是CWinApp::Run吧(因为消息循环就封装在Run函数里啊)?这样的话,也就是说:应用程序会先调用CWinApp::InitInstance函数,等这个函数执行完后,才会执行CWinApp::Run。 如果我上面说的都对的话,问题就来了:我用MFC框架生成一个基于对话框的应用程序(工程名是Test),并在CTestApp::InitInstance()函数中设了断点点,单步执行,当对话框弹出后CTestApp::InitInstance()函数根本不会退出,只有关闭对话框,程序退出时,这个函数才会执行完毕退出。这样的话,那个封装了消息循环的Run函数,到底是在什么时候执行的呢?它是和CTestApp::InitInstance()函数同时执行的吗?搞不清楚了,希望高手能够解答,谢谢!
展开
1个回答
展开全部
哈,小伙子精神不错啊...
是这样的.....
MFC的基于于对话框的应用程序与文档的应用程序用的不是同一个run.
你上面的理解是文档类型的.
到于对话框,请看CTestApp::InitInstance()中的代码,其中有以下几句:
CTestDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
大致是这样吧.这个DoModal内部有为模态对话框重建一个消息循环,模态对话框用得就是这样消息循环.你可以去百度下大牛们对模态对话框消息循环的分析.
当对话框退出的时候,InitIntance总是会返回false,而这在winmain里的有大致这样的代码:
if(!initInstance())//函数不是这样直接写,但最终是调用这个函数
{
XXXXXXXXXX
goto failture;
}
这个goto语句直接会将CWinApp::Run直接跳过.从而直接结束winmain.
明白?给点分吧,打字不容易啊,兄弟
是这样的.....
MFC的基于于对话框的应用程序与文档的应用程序用的不是同一个run.
你上面的理解是文档类型的.
到于对话框,请看CTestApp::InitInstance()中的代码,其中有以下几句:
CTestDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
大致是这样吧.这个DoModal内部有为模态对话框重建一个消息循环,模态对话框用得就是这样消息循环.你可以去百度下大牛们对模态对话框消息循环的分析.
当对话框退出的时候,InitIntance总是会返回false,而这在winmain里的有大致这样的代码:
if(!initInstance())//函数不是这样直接写,但最终是调用这个函数
{
XXXXXXXXXX
goto failture;
}
这个goto语句直接会将CWinApp::Run直接跳过.从而直接结束winmain.
明白?给点分吧,打字不容易啊,兄弟
更多追问追答
追问
前辈,先不要慌嘛,我想再问清楚一点,也就是说:在单文档和多文档的应用程序中的消息循环执行的是CWinApp::Run(),而在对话框的应用程序中,将不执行CWinApp::Run()这个消息循环,而是会执行另一个消息循环,是这样吗?
追答
大概是这样的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询