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