【问题标题】:WM_SIZE and WM_PAINT messages precedenceWM_SIZE 和 WM_PAINT 消息优先级
【发布时间】:2015-12-23 01:31:54
【问题描述】:

WM_SIZEWM_PAINT 消息都发送时(例如:当我将窗口调整为更大尺寸时),是否保证WM_SIZE 消息将在WM_PAINT 消息之前发送?

【问题讨论】:

    标签: c winapi


    【解决方案1】:

    是的,首先收到WM_SIZE,然后WM_PAINT会以新大小发送。

    实际上,WM_PAINT 是一个 lazy 消息(另一个是 WM_TIMER,IIRC):它实际上并没有发送到消息队列。相反,当窗口无效时,会设置一个标志,当您调用GetMessage() 并且队列中没有剩余消息时,它会检查无效标志。如果设置了,它将返回一个捏造的WM_PAINT 消息。

    这具有WM_PAINT 具有低优先级的效果,并在一次重绘中有效地融合了所有待处理的无效。

    【讨论】:

    • WM_PAINT通常是您描述的合成消息。但是,UpdateWindow()RedrawWindow(RDW_UPDATENOW) 会生成一个真实的WM_PAINT 消息,该消息会立即直接发送到窗口,绕过消息队列。窗口不会知道其中的区别,它只会在被告知绘画时进行绘画。
    猜你喜欢
    • 2012-05-31
    • 2012-09-04
    • 1970-01-01
    • 2015-02-11
    • 2012-09-09
    • 2014-02-08
    • 2023-04-01
    • 1970-01-01
    • 2021-05-14
    相关资源
    最近更新 更多