【发布时间】:2015-10-13 18:23:37
【问题描述】:
WM_PAINT 消息不会发送到消息队列,而是当消息队列为空时,WM_PAINT 消息会发送到窗口过程(如果窗口的某些区域无效)。
但是,WM_ERASEBKGND 消息是以某种类似方式发送的,还是它们只是发布到消息队列中(documentation 对此不作任何说明)。
【问题讨论】:
-
这不是 WM_PAINT 的工作原理。当队列为空时,它们不会被发送。当队列为空时,
GetMessage合成它们。 -
@David Heffernan 我不是说 "sent" 因为它是发送到消息队列,我说的是 "sent to the window procedure" i>,这意味着窗口过程被调用(我想是
DispatchMessage())并传递WM_PAINT作为参数。我说的对吗? -
嗯,这也是排队消息在窗口过程中的结束方式。但是许多消息在没有通过消息循环和它对
DispatchMessage的调用的情况下到达窗口过程。WM_PAINT不同,它确实通过了消息循环,但实际上并没有发布到消息队列中。 -
@David Heffernan 是的,你是对的,这是我的理解。所以
GetMessage()是从消息队列中检索消息的那个,如果它看到消息队列是空的并且窗口的某些区域是无效的,它用WM_PAINT消息填充MSG结构,然后DispatchMessage()照常调用窗口过程,对吗? -
为什么人们总是问这些问题?为什么这么重要?