关于modal dialog不会冻结调用线程非GUI消息的理解.

召唤伪代码:

代码很简单, 先在Wm_CREATE中创建一个Timer, 间隔2秒MessageBox,

WM_LBUTTONDOW会显示一个DialogBox, IDD_ABOUTBOX.

 

当IDD_ABOUTBOX显示时, 主窗口的WM_PAINT仍然响应重绘, 而MessageBox也会定时的蹦出来!

如果说主窗口的消息循环被暂时中断, 那么WM_PAINT和WM_TIMER就不会响应.

如果这两个消息有响应, 主循环就没有被冻结, 但点主窗口杂没反应呢?

事情是这样的:

我们知道modal dialog自带消息循环,  当主窗口调用DialogBox时就进入了其内部的消息循环.

GetMessage的特点是从所属线程的消息队列里拿消息并处理之, 而这个线程正是我们的主窗口所在的线程,

所以虽然我们的主窗口消息循环被实际冻结了但modal dialog为我们代劳之, 主窗口的内部消息仍然有响应.

当然直接点它就没反应拉

 

网上有很多说法虽然正确但感觉过于笼统不够详尽, 所以特发此帖希望对有相同困惑的朋友能有一些帮助.

高手就路过吧:P

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值