为什么有时用空矩形调用WM_PAINT?

Voj*_*zín 3 winapi invalidation wm-paint

我正在处理很多绘图.目前我正在使用WM_TIMER来使用InvalidateRect计划绘画.由于某种原因,WM_PAINT经常被调用区域(0,0,0,0),所以基本上是一个空矩形.我试图将其解释为"整个窗口",但之后它似乎会导致性能下降.为什么Windows发送呢?

dav*_*pfx 5

您的问题在标准文档中得到了很好的解答:http://msdn.microsoft.com/en-us/library/windows/desktop/dd145213%28v=vs.85%29.aspx.

基本上,当消息队列为空时,系统发送WM_PAINT消息,默认情况下,无论是否有任何绘制,它都会这样做.许多较旧的应用程序依赖于WM_PAINT(例如进行空闲时间处理)并保持此行为可确保兼容性.

不,你不能认为它意味着整个屏幕.如果该区域为空,则应避免调用BeginPaint/EndPaint并将其传递给默认窗口过程.