鼠标移入和悬停的区别,鼠标悬停怎么操作

问题:在最近的工作中,我遇到了一个要求,即系统可以根据鼠标是否位于控件上方而做出不同的响应。我不确定你在这里所说的是否是在控件上,但它们实际上有特殊的名称:悬停和离开。所谓悬停是指将鼠标悬停在窗口所在的矩形区域上的指定时间。所谓“离开”,是指鼠标离开窗口的矩形区域。

Windows 用于表示这两个事件的消息分别是WM_MOUSEHOVER 和WM_MOUSEELEAVE。首先我们看一下MSDN对这两条消息的解释。

WM_MOUSEHOVER:

当光标位于窗口的客户区上方并达到先前TrackMouseEvent 调用中指定的持续时间时,光标将被发布到窗口。

WM_MOUSELEAVE:

当光标离开先前TrackMouseEvent 调用中指定的窗口客户区时发布到窗口。

在本次讨论中,我们将提到一个重要的函数:TrackMouseEvent。我们来看看这个函数。

跟踪鼠标事件:

当鼠标指针离开窗口或在窗口上停留指定时间时发布消息。

该函数的主要作用是当鼠标光标移过指定时间窗口或离开窗口时发送WM_MOUSEHOVER或WM_MOUSEELEAVE消息。

因此,必须在适当的时间调用TrackMouseEvent来触发WM_MOUSEHOVER/WM_MOUSELEAVE消息。那么什么时候是合适的时间呢?

调用TrackMouseEvent 的最佳时间是在WM_MOUSEMOVE 事件处理函数内,因为鼠标在用户控制下随时移动。

要处理WM_MOUSEMOVE,首先将对TrackMouseEvent 的调用添加到WM_MOUSEMOVE 事件处理函数中。这里我们将创建一个继承自CMFCButton 的自定义类CMyButton。

代码解释:

1) m_bTrackingMouse 用于指示是否进行鼠标跟踪。稍后我们将使用这个变量。

2) dwFlags 指定感兴趣的事件消息。这里设置为TME_LEAVE | TME_HOVER,表示应用程序想要接收WM_MOUSEHOVER和WM_MOUSELEAVE消息。

3) hwndTrack:指定鼠标悬停或远离的目标窗口。系统只会检测到在此窗口上执行的操作。

4) dwHoverTime:指定时间,以毫秒为单位。当您将鼠标悬停在指定窗口上时,系统将在此时间后触发WM_MOUSEHOVER 消息。

5) 注意这里必须添加ON_WM_MOUSEMOVE()来建立消息映射。

6) 这里使用_TrackMouseEvent而不是TrackMouseEvent,原因如下:

_TrackMouseEvent 函数调用TrackMouseEvent(如果存在),否则_TrackMouseEvent 模拟TrackMouseEvent。

接收悬停或离开消息接下来,分别处理WM_MOUSEHOVER 和WM_MOUSEELEAVE 消息。

代码解释:

1)分别使用两个宏ON_WM_MOUSEHOVER和ON_WM_MOUSEELEAVE建立消息映射。

2) 当您收到鼠标悬停消息时,您知道鼠标已经在窗口矩形内,并且不需要鼠标跟踪。目前,将m_bTrackingMouse 设置为false 会禁用对TrackMouseEvent 的后续调用,并防止系统进行不必要的鼠标跟踪。

3) 如果您收到鼠标离开消息,这意味着鼠标已离开窗口所在的矩形,请通过将m_bTrackingMouse 设置为true 来重新启用鼠标跟踪。

注1)有些控件,如CStic控件,默认不触发WM_MOUSEHOVER和WM_MOUSELEAVE消息。通知必须设置为true。

总结本文使用实际代码来演示鼠标悬停和消息的生成和触发过程。通过这种实践,你可以将此功能代码添加到控件的自绘中,以实现特殊效果,例如当鼠标悬停在控件上时改变控件的外观。

本文和图片来自网络,不代表火豚游戏立场,如若侵权请联系我们删除:https://www.huotun.com/game/646276.html

(0)
上一篇 2024年5月29日
下一篇 2024年5月29日

相关推荐

  • 和平精英怎么样屏蔽防具?

    和平精英怎么样屏蔽防具? 和平精英屏蔽防具方法是 玩家可以直接点击屏幕最下面的仓库。 然后在左边,有个展示设置,点击进入,就可以选择最后一个战斗中,其中有个隐藏头盔,玩家直接点击把前面的勾给取消掉,这样的话就可以把自己的头盔给隐藏掉,无论是一级、二级、三级头盔都不会显示,不过这个只是对于自己有效果,如果你以你队友或者敌人的视角来看,还是会依然存在。 和平精英…

    游戏快讯 1小时前
  • 和平精英怎么练反应? 和平精英颜色怎么调?

    和平精英怎么练反应? 1、首先,要先找到适合自己的枪械,然后练习压枪。其次要练习打靶的准确度。打靶时先练习固定靶,在固定靶射击稳定的前提下练习射击移动靶。保证枪口能够找到敌人的位置。   2、在练习好射击精度之后,要练习开镜后迅速找人锁定目标的技能,开镜练习直接开镜和左右探头开镜,训练反应速度。   3、练习好射击精度和开镜反应速度之后,就要练习移动情况下的…

    游戏快讯 2小时前
  • 和平精英怎么获得电摇兑换码?

    和平精英怎么获得电摇兑换码? 电摇没有兑换码,只能在商城里面用物资币兑换攒够60个物资币即可兑换电摇,可以用阅换码去约换服饰币,攒够符石必须兑换电摇 和平精英CPU兑换码? 康师傅兑换码:需要购买官方合作款的香辣牛肉面,然后用微信扫描料包上的二维码。在小程序“召唤空投”中可以获取军需礼包。 玛莎拉蒂兑换码:官网赠送钥匙兑换码,无法从其他平台获取,建议不要购买…

    游戏快讯 3小时前
  • 和平精英极限追猎怎么飞不了?

    和平精英极限追猎怎么飞不了? 答:和平精英极限追猎你要点两下跳跃才可以飞起来。 和平精英极限追猎飞不了? 和平精英游戏中,追猎模式玩家之所以能飞是因为穿上了【外骨骼腿甲】,这个装备搭载着推进器,只要点击推进功能特种兵就可以上天。外骨骼腿甲,是在矩阵基站中用纳米晶体和蓝图合成而来的。 和平精英极限追猎飞不起来? 和平精英极限追猎是在创意工坊里面的模式。它是进入…

    游戏快讯 8小时前
  • 《和平精英》怎么调灵敏度?

    《和平精英》怎么调灵敏度? 1. 打开和平精英,点击展开图标。 2. 点击设置。 3. 点击灵敏度设置。 4. 可参考如下参数设置灵敏度即可。 和平精英跳跃灵敏度怎么调? 根据个人习惯调整跳跃灵敏度。解释和平精英是一个需要玩家进行各种操作的游戏,其中跳跃是非常重要的操作之一。灵敏度设置可以影响跳跃的效果,因此不同的玩家会根据自己的操作习惯选择不同的跳跃灵敏度…

    游戏快讯 9小时前