我看到网上说在WM_PAINT处理时期,呼叫BeginPaint时,如果背景还没有被擦除就要用窗口类的画刷来擦除,那就是说在处理WM_PAINT时就会把无效区域用窗口类的画刷把其先填充好再进行下面的绘图吗?这里没很明白啊,如果这样的话我这样处理消息WM_PAINT消息:
case WM_PAINT:
     return 0 ;不呼叫BeginPaint函数,不经过任何处理,当被盖住后再移开,应该要出现一块缺的地方啊,背景却没出现缺一块的地方,也就是说不是BeginPaint来用窗口类画刷重刷背景,那背景是怎么刷好的呢?

解决方案 »

  1.   

    除了BeginPaint会发WM_ERASEBKGND消息,系统也会发WM_ERASEBKGND消息给它,它在WM_ERASEBKGND刷出背景了不要在WM_PAINT直接返回0,不用BeginPaint也要用ValidateRect使区域有效,否则会不断接收到WM_PAINT消息,占用CPU
      

  2.   

    系统默认有个刷墙工WERASEBKGND,你屏蔽掉它应该可以,WM_PAINT很多地方会传送,要明白道理!1
      

  3.   

    WM_ERASEBKGND负责擦除背景,WM_PAINT只是负责画与不画,