我看一些程序在客户区域绘图时,都要用CWnd::InvalidateRect设置一个无效区域在话,有什么用处吗?
我直接画上去看起来也没什么不同啊?

解决方案 »

  1.   

    可以提高效率,只画rect指定的地方
      

  2.   

    不知道你还有那里不明白?
    CWnd::Invalidate
    CWnd::InvalidateRect
    一个设置整个客户区无效,一个设置客户区的某个区域无效
    所谓无效,就是告诉windows需要刷新
    刷新全部和刷新一部分的区别而已
      

  3.   

    告诉windows刷新rect指定的区域。
    另外Invalidate()是刷新窗口全部内容,所以使用CWnd::InvalidateRect刷新指定的区域,程序运行效率高。
      

  4.   

    告诉windows刷新无效区域,然后呢,调用OnPaint()函数是吗?但是我在OnPaint()函数中强行绘制了整个客户区,那我确定的无效区域rect有什么用处?
      

  5.   

    你可以用GetClipBox()得到无效区域,然后只绘制该区域内的内容,比起绘制整屏的内容,自然减少了工作量。
      

  6.   

    如果你OnPaint()函数中强行绘制了整个客户区,那InvalidateRect和Invalidate效果应该是一样的了,只是起到刷新的作用就是你说的调用OnPaint()函数,如果你绘图时只是绘制了部分,那么InvalidateRect()指定范围后执行效率更好。