程序中捕获鼠标事件,用于实现屏幕控件的拖动功能。一开始的时候我只能想到获取鼠标按下时的坐标值
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
如此递推便可实现控件的实时移动。这有点像弦截法求方程根