永发信息网

MFC中(比如基于对话框的应用程序),消息循环是在InitInstance()函数执行完以后才进入的吗?

答案:1  悬赏:80  手机版
解决时间 2021-12-04 02:57
  • 提问者网友:趣果有间
  • 2021-12-03 15:00
MFC中(比如基于对话框的应用程序),消息循环是在InitInstance()函数执行完以后才进入的吗?
最佳答案
  • 五星知识达人网友:动情书生
  • 2021-12-03 16:33
哈,小伙子精神不错啊...
是这样的.....
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()这个消息循环,而是会执行另一个消息循环,是这样吗?追答大概是这样的追问昨天查了一些资料,算是明白了吧,消息循环有两种:1、UI线程的消息循环(应该也就是您所说的文档类型的),这个函数就是平时比较常见的那个CWinThread::Run(CWinApp::Run )。2、模态消息循环,那么这个函数是什么呢?它就是CWnd类里边的一个成员函数RunModalLoop。当我们建立模态对话框以后,进入的就是这个消息循环,它将暂时替代UI线程的消息循环。查看DoModal()函数的源代码,就可以看到。
多谢前辈指点了,呵呵!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯