WM_PAINT 与 WM_ERASEBKGND消息的深入分析

  1. 当WM_PAINT消息不是由函数InvalidateRect产生的时(即通过最大话,最小化,移动,下拉菜单等),系统会先产生连续产生若干个WM_ERASEBKGND消息,紧接着在产生WM_PAINT消息。
    如果程序没有自己处理WM_ERASEBKGND消息则默认由函数DefWindowProc函数处理(此函数使用在注册窗口类时使用的画刷擦除无效区域wndclass.hbrBackground)函数返回FLASE,如果程序自己处理WM_ERASEBKGND消息则返回TRUE。
    紧接着程序处理WM_PAINT消息,函数BeginPaint的参数PAINTSTRUCT结构(绘制信息结构)的fErase字段的值取决于WM_ERASEBKGND消息的返回,如果此消息返回FLASE,则fErase字段的值TRUE,否则为Flase。(函数BeginPaint会使无效区域变得有效)
  2. 当WM_PAINT消息是由InvalidateRect函数产生的时候,如果函数的bErase参数为TRUE,则BeginPaint函数察觉需要擦除背景则发送一个WM_ERASEBKGND消息(后面处理和1一样),如果为FLASE则不发送WM_ERASEBKGND消息。
    总结:如果说WM_ERASEBKGND消息是由BeginPaint函数产生的是不对的(得分情况处理)
原文地址:https://www.cnblogs.com/revercc/p/13287088.html