Winapi 为什么WM_PAINT有时被称为空矩形?

Winapi 为什么WM_PAINT有时被称为空矩形?,winapi,invalidation,wm-paint,Winapi,Invalidation,Wm Paint,我在画很多东西。目前,我正在使用WM_定时器来安排绘画使用。出于某种原因,WM_PAINT通常与区域(0,0,0,0)一起调用,因此基本上是一个空矩形。我试图将其解释为“整个窗口”,但随后它似乎导致了相当多的性能下降。那么Windows为什么要发送它呢?您的问题在标准文档中得到了很好的回答: 基本上,当消息队列为空时,系统发送WM_PAINT消息,默认情况下,无论是否有任何要绘制的内容,系统都会偶尔发送WM_PAINT消息。许多旧的应用程序依赖于WM_PAINT(例如,进行空闲时间处理),保持这

我在画很多东西。目前,我正在使用WM_定时器来安排绘画使用。出于某种原因,WM_PAINT通常与区域(0,0,0,0)一起调用,因此基本上是一个空矩形。我试图将其解释为“整个窗口”,但随后它似乎导致了相当多的性能下降。那么Windows为什么要发送它呢?

您的问题在标准文档中得到了很好的回答:

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


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

您需要发布演示问题的重新编程代码。这意味着“不需要绘制任何内容”。打电话给EndPaint。出于兼容性原因发送空矩形,您可以使用RDW_INTERNALPAINT显式请求它们。