召唤伪代码:
代码很简单, 先在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