鼠标拖动图像,要有动态拖动的过程(可以是虚框),图像不规则,关键是如何在图像拖动之后恢复背景,不是整个控件拖动,因为
要保留原来的图像,类似地图编辑器一样!很实用的技术,另外还有如何消除抖动?

解决方案 »

  1.   

    http://www.bravetech.com/magiccanvas/test.htm
    1.上面这个测试用例中你可以看到拖动,特别是人物,他们都是不规则的。这方面的资料应该不少,自己写也很快,主要在OnLButtonDown/Up/OnMouseMove中响应坐标变换,拖动的虚框可以通过ROP两次重画消除掉
    2.关于背景重画,你在ButtonUp的时候,重新画一下对象拖动前的区域或者整个重刷
    3.当然你画的每个图形都应该是一个对象实例
      

  2.   

    要用双缓冲,创建一个双倍大小拖动目标的内存BITMAP(CreateCompatibleBitmap),WM_LBUTTONDOWN时记录鼠标位置,拖动时处理WM_MOUSEMOVE消息,根据鼠标位置与上一次记录的鼠标位置计算一下拖动目标新的位置与原位置是否有重叠部分,无重叠部分,在原位置区域画上背景,新位置画上拖动目标图象。有重叠部分,就要用到内存图象了,只需要画拖动目标新位置(x1,y1)与原位置(x0,y0)的包围矩形区域(左上角坐标(x3,y3):min(x0,x1},min(y0,y1),右下角坐标:max(x0,x1)+图象宽,max(y0,y1)+图象高),先在内存图象上画上该区域坐标的背景,再画上图象(对应坐标:x1-x3,y1-y3),然后将该内存图象画到窗口的x3,y3位置即可。