WM_PAINT 与 WM_ERASEBKGND(三种情况,比较清楚)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WM_PAINT 与 WM_ERASEBKGND(三种情况,比较清楚)相关的知识,希望对你有一定的参考价值。

一直对这两个消息的关系不是太了解,借重新深刻学习windows编程的机会研究一番。

当窗口从无效变为有效时,比方将部分覆盖的窗口恢复时会重绘窗口时:1)程序首先会通过发送其他消息调用DefWindowProc,它内部会发送WM_ERASEBKGND消息,然后才会发送WM_PAINT消息,而且不经过消息队列。2)诸如UpdateWindow也会先调用WM_ERASEBKGND消息的处理过程,然后才会调用WM_PAINT消息的处理过程。3)当调用InvalidateRect时(三个参数:hWnd,RECT,bErase),如果bErase参数为TRUE时会先调用WM_ERASEBKGND消息的处理过程。为False时,只会发送WM_PAINT消息到队列。所以InvalidateRect不是立刻调用WM_PAINT消息的处理过程,他只是给程序窗口增加一个更新区域(参阅MSDN)。

另外关于WM_ERASEBKGND处理函数的返回值,如果处理WM_ERASEBKGND消息时返回FALSE,BeginPaint标记pt.fErase为TRUE, 如果处理WM_ERASEBKGND时返回TRUE,BeginPaint标记pt.fErase为FALSE.

如果pt.fErase标记为TRUE,指示应用程序应该处理背景,但是应用程序不一定需要处理,pt.fErase只是作为一个标记。

http://www.aichengxu.com/view/2426114

以上是关于WM_PAINT 与 WM_ERASEBKGND(三种情况,比较清楚)的主要内容,如果未能解决你的问题,请参考以下文章

Invalidate(TRUE)与Invalidate(FALSE)区别(前者会发送WM_ERASEBKGND消息全部刷新,然后使用WM_PAINT消息绘制,而后者只发送WM_PAINT消息)(示例代

深度分析WM_PAINT和WM_ERASEBKGND消息

窗口绘制有关的消息整理 WM_PAINT, WM_NCPAINT, WM_ERASEBKGND

背景色与WM_ERASEBKGND

令人生疑的Windows窗口消息WM_PAINT详解

Invalidate()函数