(1)目的描述:在MFC中重新实现鼠标事件功能,实现鼠标左键的拖动效果和滚轮的拖动效果。
([2)鼠标事件描述:
OnMouseMove响应鼠标移动事件
OnMouseWheel响应鼠标中键的滚动
([3)鼠标事件参数说明
afx_msgvoidOnMouseMove(UINTnFlags,CPointpoint);
nFlags描述:指示是否按下了虚拟按钮,此参数可以是以下值的任意组合
按下CTRL键时的MK_CONTROL
按下鼠标左键时的MK_LBUTTON
MK_MBUTTON当按下鼠标中键(不按下滚动键)
按下鼠标右键时会显示MK_RBUTTON。
按下SHIFT时的MK_SHIFT。
点描述:鼠标的X,Y坐标:此坐标是鼠标基点相对于其所在窗口左上角的位置。它是屏幕像素上的相对位置,而不是绝对位置。
afx_msg BOOL OnMouseWheel(UINT nFlags,shortzDelta,CPointpt);
nFlags与上述相同
zDelta:当它大于0时,向上滚动,而当它小于0时,向下滚动。小于零的值表示向后旋转(朝向用户),而大于零的值表示向后旋转(远离用户)。在Windows下,通常向上滚动以缩小/向上移动窗口,反之亦然。
pt ::鼠标的X和Y坐标基于父窗口的左上角。指定光标的x和y坐标。这些坐标始终相对于窗口的左上角。
([4)鼠标拖动和缩放功能的实现
1.运动的效果得以实现
要实现移动,例如用鼠标左键拖动按钮/图片在窗口上移动,就可以达到附加的结果要求:将鼠标放在按钮/图片的A点上,移动后,鼠标点仍在点A
我们通过了
a。检查鼠标是否在按钮/图片上(确保不能将图标移动到任何地方),然后按向左按钮
b。记录鼠标的当前点和最后一点,计算两者的偏移值,然后使用此偏移值移动按钮/图片(MoveWindows)
(记录最后一点的方法可以使用静态变量。完成移动后,将当前点分配给静态变量)(具体实现可以灵活处理)
实现原理是:相对静态-鼠标和对象的相对位置保持不变,鼠标的偏移量就是对象的偏移量
2.实现缩放效果(以鼠标点为中心进行缩放)
要实现缩放,例如滑动中间轮以放大或缩小以放大按钮/图像,还需要满足其他要求:将鼠标放在按钮/图像的A点上,缩放后,鼠标点仍在点A上,并且缩放以鼠标点为中心
a。还要检测鼠标在按钮/图片上(确保您可以缩放按钮/图片的位置不是全部)
b。获取当前按钮/图片的高度和宽度(使用getClientRect)
c。获取相对于按钮/图片位置的当前pt点x,y,然后计算该位置相对于宽度和高度的比例
d。确定zDelta是正值还是负值以放大和缩小(按比例调整图片的高度和宽度),并调整图片左上点(左,上)的位置,以确保c中的比率保持不变(---确保鼠标在中央放大或缩小)
实现原理是:相对运动---鼠标和对象点的位置保持不变,鼠标周围对象点的长和宽成比例缩放。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-363504-1.html
期待
孤芳自赏没有什么用