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消息)(示例代