ValidateRect与BeginPaint

时间:2012-08-27 21:33:23

标签: winapi

来自MSDN文档:

  

BeginPaint函数验证整个客户区。

     

如果是一部分,则不应调用ValidateRect函数   必须在下一个WM_PAINT消息之前验证更新区域   生成的。1

我多年来一直使用Win32 API编程,我从未想过要调用ValidateRect函数。我今天的一位同事指出,我们错过了对ValidateRect的调用,修复了我们使用GDI进行高速动画制作的错误(我知道,这是一个矛盾的反应)

有人能告诉我在BeginPaint / EndPaint对之后是否需要调用ValidateRect吗?我在MSDN上看不到任何有关这方面的文档,以及我看到你不需要的文档和示例。

1 个答案:

答案 0 :(得分:2)

没有必要。验证区域时会使用BeginPaint,因为您在WM_PAINT处理了它(绘制了它)。

ValidateRect更多的是“取消无效”,通常是在没有WM_PAINT的情况下直接在窗口上绘画,或者是因为某些内容发生了变化,您不再希望发出待处理的WM_PAINT。< / p>

它修复了一个错误的事实可能意味着还有其他事情正在发生,并且这意外地修复了它(可能通过减少WM_PAINT消息的数量?)或错误的观察(例如你改变了2件但是这一个引起了注意而不是另一个是实际的修复。