enablewindow showwindow 模态对话框的消息处理机制分析(2)

电脑杂谈  发布时间:2017-01-22 04:03:32  来源:网络整理

::SetActiveWindow(hParent);

return TRUE;

}

}

else ::WaitMessage();

}

return FALSE;

}

这样就可以解释明白了:

(1)当在我的线程A中使用这个策略解决问题时,由于我的是普通的CWnd窗口,并且是PostMessage方式来调用我的OnConfig()函数的,所以这个时候是不存在消息重入的,

所以根本不能起作用。

(2)当将这个处理逻辑移到目标线程B,并且我以SendMessage(UM_CONFIG)的时候,这时候是存在消息重入的,因为SendMessage是直接调用的消息处理函数,不存在进入消息

队列等待的情况。但是为什么最终还是会出现两个设置对话框呢,我觉得原因可能在于:点击'设置'按钮的速度过快,导致第一个设置窗口还没有开始设置m_bIsOnlay的值为false

之前,就已经进入了第二个设置窗口的响应。enablewindow showwindow

(3)当将这个处理逻辑移到目标线程B,并且我以PostMessage(UM_CONFIG)发送消息的时候,问题完美解决。原因:这个时候存在消息重入,由于我是PostMessage的,所以

UM_CONFIG会进入到线程B的消息队列,这样线程B在处理第一个消息的时候,先设置好了m_bIsOnly=false,后才会创建自己的消息循环,取得第二个UM_CONGIG消息,调用消息处理

函数,这时m_bIsOnly=FALSE,所以直接返回,达到了只出现一个设置对话框的目的。

最后总结下消息重入的两种情况:

1.SendMessage

2.模态对话框,MessageBox之类内部拥有自己的消息循环的情况


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-27964-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 吴雪飞
      吴雪飞

      欧盟绝对不会放过这个机会正式转正

    • 尚迪
      尚迪

      那一千五都没有

    热点图片
    拼命载入中...