程序中捕获鼠标事件,用于实现屏幕控件的拖动功能。一开始的时候我只能想到获取鼠标按下时的坐标值 a(x,y) 和鼠标抬起时的坐标值 b(m,n) ,将两个坐标值之间的距离加到基准坐标 G(base_x,base_y) 上,即
base_x += m-x ;
base_y += n-y;
得到 G’(m-x+base_x,n-y+base_y) ,实现区域的拖动,但是在这种情况下鼠标在移动的过程中不能实时的改变区域的位置,而是直到最终鼠标抬起时,瞬间移动到抬起时的位置。后来经多方参考:以鼠标按下时的坐标 A(x,y) ,动态的获取鼠标移动时的坐标 B(m,n) ,接下来的一步尤为重要,如果此时仍旧按照以上办法直接取 B-A 的值加到基准坐标 G 上,出现的结果是意想不到的,由于 B 是在随时变动的,鼠标移动的过程中相当于无限的向基准坐标上加上之前所有的差值。为了实时的取得鼠标所在点与按下时坐标距离,最简单的是实时的更新 A 的坐标,将 B 赋值给 A ,当鼠标移动到下一个坐标 B’ 时,距离差就变为 B’-B ,
即:
base_x +=m-x ;
base_y +=n-y ;
x=m ;
y=n ;
如此递推便可实现控件的实时移动。这有点像弦截法求方程根