MFC模态对话框的消息循环】的更多相关文章

MFC模态对话框的消息循环 单线程程序, 当主窗口响应函数中弹出模态对话框时,为什么主窗口响应函数可能照常工作? 当弹出模态对话框时,线程的消息循环无法返回,父窗口的事件本应没人处理,应该处于卡死状态,但实事上父窗口是可以正常响应能接收到的消息的,比如计时器传来的WM_TIMER 及系统托盘菜单传回来的WM_COMMAND. 之前的消息循环无法返回是正确的,但模态对话框并不意味着死循环,实事上,它在做另一个消息循环. AfxInternalPumpMessage() 里面就是一个消息泵,包括消息…
周末天冷,索性把电脑抱到床上上网,这几天看了 dbzhang800 博客关于 Qt 事件循环的几篇 Blog,发现自己对 Qt 的事件循环有不少误解.从来只看到现象,这次借 dbzhang800 的博客,就代码论事,因此了解到一些 Qt 深层的实现,虽然是在 Qt 庞大的构架里只算的是冰山的一角,确让人颇为收益. 从 dbzhang800 的博客中转载两篇关于事件循环的文章,放在一起,写作备忘. 再次提到的一点是:事件循环和线程没有必然关系. QThread 的 run() 方法始终是在一个单独…
Mfc模态对话框: 创建模态对话框: [模态对话框:具有独占行为,必须由用户完成对当前对话框的响应,才能对本对话框所属的进程进行其他操作] 例如: 我们创建一个加法计算器.点击计算之后,弹出一个对话框,当用户点击完确定之后.才进行计算,如果点击取消,则不进行计算. 把上次那个反复敲几遍就会啦,我本身也是边做博客边在背.写过一遍,就是比较有作用. 我懒了,就按照上一讲制作的东西接着往下写了. 以下正文: 一.界面部分 经常从下面这四个选项卡来回点点,要不每次我说的是啥你都不知道,,,开始我也不敢点…
起源 qtcn中文论坛中有网友问到: 假设程序正常运行时,只有一个简单的窗体A,此时只有一个GUI主线程,在这个主线程中有一个事件循环处理窗体上的事件.当此程序运行到某阶段时,弹出一个模态窗体B(书上说模态窗体是有其自己的事件循环的),此时模态窗体B是否会有一个对应的子线程处理其事件循环? 这儿其实有两个问题: 模态对话框 和 事件循环 没有必然联系 事件循环 和 子线程 没有必然联系 题外: 如果进一步呢?其实我们还可以说: 模态对话框 和 QDialog 没必要联系 QDialog 对话框…
从代码分析原因吧: OnIdle函数在MFC的CWinThread::Run函数中被调用,如下 // main running routine until thread exits int CWinThread::Run() { ASSERT_VALID(this); _AFX_THREAD_STATE* pState = AfxGetThreadState(); // for tracking the idle time state BOOL bIdle = TRUE; LONG lIdleC…
modal dialogs与modeless dialogs,modal dialogs会让原窗体不被选中,modeless dialogs原窗体依然可以选中. 1.模态对话框的显示 DlgModal dlg; //模态对话框对象 dlg.DoModal(); //显示 2.非模态对话框的显示 初始化时就要创建出来 dlg.Create(IDD_DIALOG_MODELESS); //创建非模态对话框,OnInitDialog()中.以保证只被创建一次. MFCApplication2Dlg.h…
首先,应该清楚MFC的消息循环(::GetMessage,::PeekMessage),消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情.在MFC的应用程序中(应用程序类基于CWinThread继承),必须要有一个消息循环,他的作用是从应用程序的消息队列中读取消息,并把它派送出去(::DispatchMessage).而消息路由是指消息派送出去之后,系统(USER32.DLL)把消息投递到哪个窗口,以及以后消息在窗口之间的传递是怎样的. 消息…
学习c++的目的就是为了使用封装好的类.而最最经典的封装类当然是微软的MFC窗体程序类. 学习MFC编程之前要学习c++的主要知识,掌握c++的基本编程思想. 以下就看下我学习的MFC模态对话框的数据传递. 首先.什么叫做模态对话框呢?模态对话框指的是当弹出这种对话框的时候,程序不能对应除了此对话框外其它的窗体的响应.直到关闭了这个对话框,程序才干响应其它的对话框的响应.非模态对话框即使弹出也能响应程序其它的窗体而不须要等到此窗体的关闭.那么MFC中怎么才干弹出模态对话框呢?事实上非常easy,…
在SDK中使用非模态对话框时的几个问题: 1.为什么要调用IsDialogMessage?? 2.非模态对话框与主窗口有什么区别? 3.如果不调用IsDialogMessage,消息能不能传递到对话框? 4.如果一定要调用IsDialogMessage,那么如果有多个非模态对话框的话,是否对每一个非模态对话框都必须单独调用 IsDialogMessage?如果真是这样,MFC是如何处理的?因为MFC隐藏了主消息循环,我如何增加对IsDialogMessage的调用? 在SDK中使用非模态对话框时…
经常有人问关于模态对话框和系统菜单内部实现原理方面的问题, 因为系统通过API隐藏了太多细节,这2个问题确实令初学者甚至是有经验的开发者困扰, 下面是我个人的一些经验总结. 先说模态对话框,外部看模态对话框其实就是Dialog弹出以后函数(或者说调用栈call stack)不直接返回, 而是要让你做出选择后关闭Dialog, 然后程序再继续往下执行.在你关闭Modal Dialog之前, 你不能做其他操作.下面是我自己模拟模态对话框行为的代码: #define MODAL_DLG_EXIT_NO…