它滚动后刷新区域只是新滚动出来那部分我试着在自己的窗口里面用Bitblt复制旧部分,也只刷新滚动部分但是这样,的话,在我这个窗口上面的窗口内容也被Bitblt复制上了有没有办法知道自己被别人窗口挡住的区域?或者有其它办法Bitblt时只复制自己窗口的内容

解决方案 »

  1.   

    CDC::GetClipRect得到需要得绘的区域
      

  2.   

    DentistryDoctor可能没明白我的意思现在是我要主动刷新,我自己要算出一个Rect,然后调用InvalidateRect滚动后应该刷新的部分倒是可以计算出来但就是我不知道自己被哪些窗口遮住了,因为直接Bitblt会把档我的窗口内容画到我的窗口上
      

  3.   

    刚才发现CScrollView也有问题如果上面有其它窗口,滚动后也有些地方出现没重绘的情况但它不会把其它窗口的内容Bitblt到自己上面,这个不知道怎么搞的
      

  4.   

    不要试图保存场景中的图像,一旦被其它窗口覆盖就会把其它窗口内容也保存了。
    其实没有必要去管那些细节,你只要在WM_PAINT里将窗口上该画的都画一遍就行了。CScrollView在滚动后会自动将滚动出来的部分添加到无效区域. 尽管在WM_PAINT里做了全绘,但只有无效区域才被更新。虽然在这种情况下WM_PAINT的全绘会有浪费时间的无用绘制工作,但对于一般的绘制来说影响是很小的。
      

  5.   

    而且滚动后应该刷新哪些区域不知道啊
    新滚动上来的是知道的,但是被其它窗口挡住那块怎么能得到--------------
    window 会管理的, CDC::GetClipBox
      

  6.   

    搞定了,直接用CWnd::ScrollWindow()它自己就能像CScrollView那样了