来自MSDN文档:
BeginPaint函数验证整个客户区。
如果是一部分,则不应调用ValidateRect函数 必须在下一个WM_PAINT消息之前验证更新区域 生成的。1
我多年来一直使用Win32 API编程,我从未想过要调用ValidateRect函数。我今天的一位同事指出,我们错过了对ValidateRect的调用,修复了我们使用GDI进行高速动画制作的错误(我知道,这是一个矛盾的反应)
有人能告诉我在BeginPaint / EndPaint对之后是否需要调用ValidateRect吗?我在MSDN上看不到任何有关这方面的文档,以及我看到你不需要的文档和示例。
答案 0 :(得分:2)
没有必要。验证区域时会使用BeginPaint
,因为您在WM_PAINT
处理了它(绘制了它)。
ValidateRect
更多的是“取消无效”,通常是在没有WM_PAINT
的情况下直接在窗口上绘画,或者是因为某些内容发生了变化,您不再希望发出待处理的WM_PAINT
。< / p>
它修复了一个错误的事实可能意味着还有其他事情正在发生,并且这意外地修复了它(可能通过减少WM_PAINT
消息的数量?)或错误的观察(例如你改变了2件但是这一个引起了注意而不是另一个是实际的修复。