Windows为了刷新快些,刷新时只刷新一小块区域,如果整个窗口刷新的话,显然比刷新一小块区域慢。所以再你刷新前要指定哪块区域需要刷新,也就是无效的区域,这样系统就根据你提供的这块区域刷新(redraw,重画)。

解决方案 »

  1.   

    E_农民果然有一套,看到了吗???
    就是这样的.无效的区域当然要来让他有效了哦,要让他有效当然有给他一个动作,那就是ReDrawn
    !!
      

  2.   

    GDI很烦我正在头疼,
    InvalidateRect的作用是使rect失效,windows就会相应的发出WM_PAINT消息。
    在响应此消息时BeginPaint(...)使rect有效,就不会再来WM_PAINT了。
    但GDI相关函数无数无数...
      

  3.   

    我补充一点,如果你的程序支持文档/视图结构,那么当你在DOC类中调用InvalidateRect()时,需要调用UpdateAllViews();使其在视图类中起作用,但如果在视图类中使用InvalidateRect(),则立即起作用。无效区的绘制工作在OnDraw()中完成。
      

  4.   

    今天又看到这句话,我理解是在有scroll bar的窗口程序中不需要invalidated函数来产生wm_paint消息来重绘窗口?我理解的正确否?
    Windows automatically invalidates the rectangle in the client area "uncovered" by the scrolling operation. This generates a WM_PAINT message. InvalidateRect is no longer needed. 
      

  5.   

    不是的,这句话的意思是说在滑动滚动条的时候,WINDOWS自动把整个client area标为无效区,相对于滑动滚动条的动作产生一个WM_PAINT消息。如果你需要在OnDraw()中重绘一块特定的区域,还是要调用InvalidateRect()函数。