模态对话框消息相关

今天遇到一个奇怪的问题:多文档应用程序View中一个onLbuttondown函数没有走完,就接着执行onLbuttonUp了,调试发现,罪魁祸首就是在onLbuttonDown里面doModal的一个模态对话框。

       经过调试,初步弄明白了MFC是如何处理这个消息的了,处理过程如下:

      一次点击,产生了两个事件down和up,此时两个事件都已经放在了消息对列里面,这个任务是操作系统完成的。同时应用程序一直在监听消息,首先截获了down的消息,进入down的响应函数,在down里面,产生了一个模态对话框,此时当前进程的消息交由该模态对话框处理,于是悲剧的事情发生了,消息队列里面down事件后面的up也被peek出来了,模态对话框先是调用isdialogMessage判断它不是当前对话框的消息就直接抛给了view来处理了。最终就导致了,down事件未响应完,up事件就开始处理了。

这里有一点要说明一下,模态对话框的父窗体并不是不处理任何消息的(刷新之类的还是会调用的),它只是不能再接收用户输入而已,但是这里的up消息在模态对话框弹出之前就已经在消息队列里面了。

posted on 2012-11-06 23:00  朱祺  阅读(237)  评论(0编辑  收藏  举报

导航