转载自: [MFC]OnMouseMove移动位置和OnMouseWheel缩放实现
(1)目的说明:重新实现MFC中的鼠标事件函数,实现鼠标左键拖动效果和滚轮拖动效果。
(2)鼠标事件说明:
OnMouseMove响应鼠标移动事件
OnMouseWheel响应鼠标中键的滚动
(3)鼠标事件参数说明
afx_msgvoidOnMouseMove(UINTnFlags, CPointpoint);1. 移动的效果实现
要实现移动,例如鼠标左键拖动butoon/图片在窗口上移动,实现的结果附加要求:鼠标放在button/图片的A点,移动之后,鼠标点依然在A点上
我们通过
a. 检测鼠标已在button/图片上(确保不是在哪都可以移动图标),并且左键按下
b. 记录鼠标当前点和上个点,计算两个的偏移值,然后使用这个偏移值来移动button/图片(MoveWindows)
(记录上个点的方法可以使用静态变量,移动完毕后,把当前点赋值给静态变量)(具体实现可以灵活处理)
实现原理是:相对静止---鼠标和对象相对位置不变,鼠标的偏移量,就是我们对象的偏移量
2. 缩放的效果实现(以鼠标点为中心缩放)
要实现缩放,例如中件滑轮向上滑动缩小,向下滑动放大button/图片,实现附加要求:鼠标放在button/图片的A点,缩放之后,鼠标点依然在A点上,缩放是以鼠标点为中心
a. 同样检测鼠标已在button/图片上(确保不是在哪都可以缩放button/图片)
b. 获取当前button/图片的高和宽(使用getClientRect)
c. 获取当前pt点x,y相对于button/图片位置,然后计算该位置相对于宽和高的比值
d. 判断zDelta正负确定放大缩小(按比例调整图片高度和宽度),并调整图片左上点(left,top)的位置,确保c中的比值不变(---确保了以鼠标所在点为中心放大或缩小)
实现原理是:相对移动---鼠标和所在对象点位置不变,鼠标所在对象点的周围 长和宽 成比例的缩放
联系客服