4

从 MSDN 文档:

BeginPaint函数验证整个客户区。

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

多年来我一直在使用 Win32 API 进行编程,但我从未想过要调用该ValidateRect函数。今天我的一位同事指出,我们错过了对 的调用ValidateRect,它修复了我们使用 GDI 进行高速动画时遇到的错误(我知道,一个矛盾的说法)

有人可以告诉我在/对ValidateRect之后是否需要调用 to ?我在 MSDN 上没有看到任何说明这一点的文档,而且我看到的哪些文档和示例表明不需要调用。BeginPaintEndPaintValidateRect

4

1 回答 1

3

这不是必需的。BeginPaint在验证区域时使用,因为您在WM_PAINT.

ValidateRect更多的是“取消失效”,通常在没有或因为某些更改而直接在窗口上绘制之后WM_PAINT,您不再希望发出 pending WM_PAINT

它修复了一个错误这一事实可能意味着发生了其他事情,而这意外地修复了它(可能是通过减少WM_PAINT消息的数量?),或者错误的观察结果(例如,你改变了两件事,但这一件事引起了人们的注意,而不是其他是实际修复)。

于 2012-08-27T21:36:04.983 回答