【问题标题】:Why is WM_PAINT sometimes called with empty rectangle?为什么有时用空矩形调用 WM_PAINT?
【发布时间】:2014-05-24 22:46:08
【问题描述】:

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

【问题讨论】:

  • 您需要发布演示该问题的重现代码。
  • 意思是“不需要画任何东西”。只需调用 EndPaint。出于兼容性原因发送空矩形,您可以使用 RDW_INTERNALPAINT 明确请求它们。

标签: winapi invalidation wm-paint


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-12-23
    • 2011-11-23
    • 2021-10-14
    • 2014-04-21
    • 2020-07-30
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2017-06-06
    相关资源
    最近更新 更多