zoukankan      html  css  js  c++  java
  • 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函数产生的是不对的(得分情况处理)
  • 相关阅读:
    Condition控制线程通信
    Lock同步锁
    通过Callable接口创建线程
    CountDownLatch闭锁
    CopyOnWriteArrayList笔记
    原子变量与CAS算法
    Java网络编程之UDP
    Java网络编程之Socket
    Java网络编程之URLConnection
    Java中处理异常中return关键字
  • 原文地址:https://www.cnblogs.com/revercc/p/13287088.html
Copyright © 2011-2022 走看看