打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
MFC鼠标事件

转载自: [MFC]OnMouseMove移动位置和OnMouseWheel缩放实现

(1)目的说明:重新实现MFC中的鼠标事件函数,实现鼠标左键拖动效果和滚轮拖动效果。

(2)鼠标事件说明:

OnMouseMove响应鼠标移动事件
OnMouseWheel响应鼠标中键的滚动

(3)鼠标事件参数说明

afx_msgvoidOnMouseMove(UINTnFlags, CPointpoint);
nFlags说明:指示虚拟按键是否按下 ,此参数可以是任何下列值的组合
MK_CONTROL 当CTRL键按下时
MK_LBUTTON 当鼠标左键按下时
MK_MBUTTON 当鼠标中键按下时(滚动不属于按下)
MK_RBUTTON 当鼠标右键按下时.
MK_SHIFT 当SHIFT按下时。
point说明:鼠标的X,Y坐标:该坐标为鼠标相对所在窗口左上角为基点的位置,是一个相对位置而不是在屏幕像素上的绝对位置。
 
afx_msg BOOL OnMouseWheel( UINT nFlags, shortzDelta, CPointpt );
nFlags同上
zDelta:大于0时为向上滚动,小于0时为向下滚动。A value less than zero indicates rotating back (toward the user) while a value greater than zero indicates rotating forward (away from the user). Windows下通常向上滚动缩小/窗口上移,反之放大/下移
pt::鼠标的X,Y坐标,是以其父窗口的左上角为基点的。Specifies the x- and y-coordinate of the cursor. These coordinates are always relative to the upper-left corner of the window.

(4)鼠标拖动和缩放功能实现

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中的比值不变(---确保了以鼠标所在点为中心放大或缩小)
实现原理是:相对移动---鼠标和所在对象点位置不变,鼠标所在对象点的周围 长和宽 成比例的缩放

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
vc中如何响应键盘和鼠标事件(2
[VC] 鼠标事件的响应
VC++之简单图形绘制之绘制连续线条
怎样在照片上写字
VB中的mousedown事件
用“美图秀秀”在图片上删·加文字简单实用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服