永发信息网

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

答案:1  悬赏:80  手机版
解决时间 2021-12-04 02:57
MFC中(比如基于对话框的应用程序),消息循环是在InitInstance()函数执行完以后才进入的吗?
最佳答案
哈,小伙子精神不错啊...
是这样的.....
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()函数的源代码,就可以看到。
多谢前辈指点了,呵呵!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
有新干到山东济宁的火车吗?
家多福商店在哪里啊,我有事要去这个地方
厉彦林的个人经历
bian(变)怎么读
76年属龙男和属龙女婚配怎样
在△ABC中D,E,F分别是BC,CA,AB边上的中点,且
FTP怎样共享文件
求初音《8月31日》中文歌词
求 电视剧 心术 免费资源 百度云
在编教师核工资归哪个部门
《皮鲁鲁和鲁西西》是谁写的
一爱u以传统节日为载体,预发中学生爱国主义的
学车倒库每次点看的都不一样是怎么回事
48V1500w的电机它的耗电电流是多少
诸几至上诲南站高铁车费要多少
推荐资讯
sai如何取消图层的浮动状态
杭州下城东新首开德胜上郡离凤凰山脚路多远
肋骨挫伤没有明显肿起,但是很痛、请问是什么
putthefoodintheb▁,oritwillgobad
终于来了,三星首款双摄手机,但它能胜过这几
表一朝灭亡用何词
Ubuntu使用QT无法输入中文怎么办
晋江开体彩
跟单员的工作是一种责任大、权力小的工作,所
关于上海办公自动化考试
淮北市小学几号期末考试啊?
问道碧玉剑怎么得?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?