MFC界面开发笔记(五)

本文详细介绍了如何在Windows环境下利用_TrackMouseEvent函数和鼠标移动事件模拟mouseleave功能。通过跟踪鼠标移动状态并结合按钮的不同状态,可以实现鼠标移入、移出按钮时更换图片的效果。

 关于实现onmouseleave功能:

这里要实现鼠标移入一个按钮,换一张图片,点击按钮换一张图片,移出再换回去,但如果是左键按住按钮移出按钮则也变成normal图片,

因为windows中没有直接实现mouseleave的函数,但可以通过mousemove和跟踪鼠标函数_TrackMouseEvent来判断。

_TrackMouseEvent函数的作用是在制定时间里当发生鼠标离开window或者盘旋在window中时出发相应事件,如TRACKMOUSEEVENT结构体如果参数中有TME_LEAVE,则跟踪是否离开window,如果有TME_HOVER,则跟踪是否盘旋在window中,那如果有TME_CANCEL|TME_LEAVE 则表示取消掉TME_LEAVE,如果一旦跟踪发现鼠标离开window或者没有盘旋在window中,则发送消息到WM_MOUSELEAVE或WM_MOUSEHOVER,并且_TrackMouseEvent失效,如果要继续跟踪则重新调用注册。参数4中如果为0,表示一直跟踪。

下面开始讲述如果实现mouseleave

1:当在重绘函数drawitem中,的结构体LPDRAWITEMSTRUCT中有成员变量itemstate,表示当前按钮状态,包括选中(ODS_DISABLE),高亮(focus),等。

2:初始时按钮为被down,也无鼠标跟踪(如标志标量tracking=false),当mouseleave时 判断tracking是否为false,是的话调用注册鼠标跟踪函数,当次函数成功调用时,返回非零值,将tracking=true,表示正在跟踪。

3:如果此时鼠标down按钮,则判断tracking是否为true,是的话取消跟踪,置tracking为false

4:当鼠标再次移动时,不管此事鼠标左键是否是按下状态,都将因为当前标志变量trackig为false而重新调用注册跟踪数遍函数,然后修改tracking为true。

5:当鼠标move时,当按钮处于down时,且::GetCapture()==m_hWnd说明,鼠标还在按钮窗口中移动,否则,说明鼠标离开按钮窗口,,此时虽然仍在响应mousemove事件,但不需要再进行任何其他操作了,此时除离开时重绘按钮图,此后就不需要再更新按钮位图,从而不会出现按钮位图闪烁了。

6:判断是用那张图时,只需要判断当前itemstate是否出于select按钮中,即进行lpdrawitemstruct->itemstate&osd_select判断是否处于down的状态。是否处于tracking是否为true,为true说明鼠标在按钮的window中。此时如果已经是按钮被按下且tracking为true,说明在按钮中按住左键的状态,否则当tracking是false,则说明鼠标离开按钮、

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值