处理WM_PAINT消息时,我省略了BeginPaint和EndPaint调用,并且CPU使用率猛增到100%。为什么是这样?
我也在使用工作线程...但是它们做的是不同的事情,似乎对这件事没有影响。
另外,我可以使用GetDC()中的设备上下文而不是BeginPaint吗?他们似乎有不同的价值观,所以我认为他们有不同的工作。
抱歉,如果我听起来像个白痴,我是WinAPI,C ++的新手,只是一般的逻辑世界...
谢谢
这是完全正常的。当窗口的更新区域不为空时,Windows会生成WM_PAINT消息。您应该做的是再次将其标记为空。例如,通过调用Begin / EndPaint()来执行此操作。
如果您不这样做,Windows会立即生成另一个WM_PAINT消息,仍然尝试清空更新区域。您的线程将消耗100%的内核,闲置地处理WM_PAINT消息,而实际上没有完成任务。也许您实际上是在绘画,Windows只是不知道您所绘画的内容,并且不会尝试猜测它。
使用Begin / EndPaint()是完成这项工作的理智之举。这不是唯一的方法,您也可以调用ValidateRect()或ValidateRgn()。只要您是“ winapi新手”,我强烈建议您以常规方式进行此操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句