我在View里绘制了几个矩形框,所有矩形框存储在一个链表中,在OnDraw()中遍历并绘出来。为了实现拖动的功能,响应OnMouseMove()事件,选中其中某个矩形然后拖动。鼠标移动的时候需要刷新矩形内的内容,用Invalidate(FALSE)的话,其他没有被拖动的矩形也会被刷新,弄得一闪一闪的。请问怎么解决?如果只是InvalidateRect的话,鼠标动作过大会产生很多拖尾。

解决方案 »

  1.   

    这是一个策略问题``用双缓冲也未必解决问题``LZ的方框有没有层的关系?我先说没有的情况``
    如果没有,照如下几步来做
    1.确定用户是否要拖动某个主框,可以通过在WM_LBUTTONDOWN里设置一个变量,记录鼠标按下时有没有点中一个方框,如果有的话,则将该变量置TRUE
    2.在WM_MOUSEMOVE时,判断该变量是否是TRUE,是的话,则移动该图层。就在这里,已经确定用户是需要拖动图层了,那就先把其他不需要拖动的方框,合并成一个HBITMAP,这只在第一次WM_MOUSEMOVE时需要做,然后接着的WM_MOUSEMOVE事件,都是只做两次画图操作,就是把刚合成的那个图,显示出来,再显示那个移动的方框
      

  2.   

    InvalidateRect的话,鼠标动作过大会产生很多拖尾。
    是这样吗?我可是亲身做过这种绘图的程序,用InvalidateRect是没有问题的,现在把你设置的那个CRect边界再扩大一点就好了。
    祝LZ成功!
      

  3.   

    谢谢CrazyAzreal的答案, 我会尝试一下