本人在OnMouseMove中调用InvalidateRec(rc, TRUE),按说应该只刷新rc范围内的东西,可是结果其他一些地方也跟着刷新,不知道为什么。没有窗口的大小变化及覆盖等事件发生。
郁闷死了
谢谢大家了~

解决方案 »

  1.   

    可是我必须使用TRUE来擦除背景,没办法
      

  2.   

    没有啊,我看过了,CRect定义不大
      

  3.   

    我也遇到过这种问题,我感觉是InvalidateRec调用OnDraw()的过程中rc大小改变了
      

  4.   

    再调用一下UpdateWindow()就可以了吧
      

  5.   

    InvalidateRect肯定是没有问题的,这个我用过n次了,可以肯定。所以如果出现楼主这个问题的只有两种可能:
    1、CRect过大;
    2、别的地方还有Invalidate或InvalidateRect检测方法:
    在InvalidateRect后面加上CPaintDC dc(this),如果画面依然更新,说明在InvalidateRect之后还有别的Invalidate或InvalidateRect;如果画面没有更新,把CPaintDC dc(this)提到InvalidateRect前面,如果画面是期望的那样,说明InvalidateRect之前还有别的Invalidate或InvalidateRect,但如果还是和不加一样的效果,那么只有一种可能,那就是CRect过大。
      

  6.   

    谢谢w_anthony。
    我试过了,发现CPaintDC dc(this)放在InvalidateRec前后都仍然使不该刷新的地方还是刷新了,唯一的区别是,放在后面时,InvalidateRec(rc,TRUE)中的rc区域刷新的慢了些。
    我可以保证不是CRect过大的原因。
    不知道还有没有其他原因啊?我在论坛上看到也有人遇到过这样的问题没有解决
      

  7.   

    放在后面依旧使不该刷新的地方刷新了,说明其他地方必定还有Invalidate或InvalidateRect,可以直接把InvalidateRect注释掉,我怀疑画面还是会更新。如果rc区域刷新的慢了些,该不会是有定时器吧?
      

  8.   

    暂时没有发现其他地方有InvalidateRec,我跟踪看看。没有定时器
    先谢谢了~^_^
      

  9.   

    如果其他地方没有Invalidate的话,不会出现这个情况的。还是查查代码吧!!