3

我正在处理很多关于绘画的事情。目前我正在使用 WM_TIMER 来安排使用 InvalidateRect 的绘画。由于某种原因,WM_PAINT 经常被称为区域(0,0,0,0),所以基本上是一个空矩形。我试图将其解释为“整个窗口”,但它似乎导致了相当多的性能下降。为什么 Windows 会发送它呢?

4

1 回答 1

5

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

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

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

于 2014-04-11T09:48:20.157 回答