现在的位置: 首页 > 综合 > 正文

WM_PAINT 与 WM_ERASEBKGND

2019年03月10日 ⁄ 综合 ⁄ 共 562字 ⁄ 字号 评论关闭

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

当窗口从无效变为有效时,比方将部分覆盖的窗口恢复时会重绘窗口,程序首先会通过发送其他消息调用DefWindowProc,它内部会发送WM_ERASEBKGND消息,然后才会发送WM_PAINT消息,而且不经过消息队列。诸如UpdateWindow也会先调用WM_ERASEBKGND消息的处理过程,然后才会调用WM_PAINT消息的处理过程。当调用InvalidateRect时,如果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只是作为一个标记。

抱歉!评论已关闭.