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

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

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日

相关推荐

  • 和平精英限时活动怎么换皮肤?

    和平精英限时活动怎么换皮肤? 和平精英的重启未来活动只需要凑到60个时空碎片就可以在兑换商店里面兑换。 和平精英绿洲活动怎么领皮肤? 关于这个问题,要领取和平精英绿洲活动的皮肤,首先要参加活动并完成相关任务。具体操作如下: 1. 进入和平精英游戏,点击左下角的“活动”按钮。 2. 找到绿洲活动,并点击进入。 3. 完成活动任务,比如完成指定局数的游戏、分享活…

    游戏快讯 13分钟前
  • 和平精英怎么闪枪? 和平精英怎么摇头闪枪?

    和平精英怎么闪枪? 通过在移动的过程中快速切换武器,达到闪枪的效果和平精英游戏中,是可以通过快速转换不同的武器来达成闪枪,即在使用枪械的过程中,很多玩家会在开枪射击时快速地更换到别的武器,比如手榴弹或冲锋枪等换完后,再切换回枪械,以达到秒杀敌人的效果这个操作需要玩家有良好的游戏经验和反应速度此外还可以结合游戏中的技能使用闪枪,游戏中有些角色的技能会提供加速、…

    游戏快讯 1小时前
  • 在和平精英里面买的皮肤从哪里找?

    在和平精英里面买的皮肤从哪里找? 查找方法是: 一首先登陆我们的游戏大区,在游戏的主页面找到右下角的军备的选项进入 二然后在这里我们可以看到有个军备库点击进入 三、最后玩家们就可以在此处查看自己的装备皮肤了 和平精英里面怎么抽皮肤? 点击军需再点击抽奖,有十连抽和单抽 和平精英里的和平人生怎么领皮肤? 和平精英里的和平人生没有办法免费领皮肤,但是可以自己买 …

    游戏快讯 4小时前
  • 和平精英雪地怎么写字?

    和平精英雪地怎么写字? .首先进入设置、通用设置选项,然后在通用设置界面中,依次点击进入键盘、键盘设置页面,接下来进入的键盘页面设置中,依次再次点击添加新键盘。 2.选择简体中文选项,再接下来在键盘中文输入法中,勾选上手写选项,然后点击右上角的完成即可,设置完成后,打开可输入文字的界面,然后长按输入左下角的球形图标,之后会弹出输入法选择选项,选择简体手写,即…

    游戏快讯 5小时前
  • 和平精英船怎么飞? 和平精英外骨骼怎么飞?

    和平精英船怎么飞? 和平精英船你要收集足够的油桶,然后把一颗手雷丢到船底下,然后你上船就会飞的很高所以就可以完成和平精英里面传飞的场景 和平精英外骨骼怎么飞? 打那个追猎模式,然后得到足够多的晶体,然后再去基站了,造腿 ,点两下跳就可以了飞了 和平精英900米怎么飞? 首先最好在跳伞前提前标好落地位置,当标记连线与飞机路径垂直时则是飞机与目标地点最近位置,这…

    游戏快讯 8小时前