鼠标事件的响应

鼠标键包括左键、右键和中键(滚轮),每个键都有三种事件消息,一是被按下,二是被释放,三是双击。下表列出了鼠标操作、消息名称及处理函数名。  鼠标操作 消息名称  处理函数名   
 左键按下  WM_LBUTTONDOWN  OnLButtonDown   

左键释放  WM_LBUTTONUP  OnLButtonUp  
 左键双击  WM_LBUTTONDBCLK  OnLButtonDbClk   

右键按下  WM_RBUTTONDOWN  OnRButtonDown   

右键释放  WM_RBUTTONUP  OnRButtonUp  
 右键双击  WM_RBUTTONDBCLK  OnRButtonDbClk   

鼠标移动  WM_MOUSEMOVE  OnMouseMove   

滚轮移动  WM_MOUSEWHEEL  OnMouseWheel 
下面说一下几个消息响应函数的原型(MFC下的) 按键按下和释放以及鼠标移动的原型是一样的,参数的意义也都一样,以左键按下为例。 
afx_msg void OnLButtonDown(UINT nFlags, CPoint point); 
nFlags表示鼠标、Shift键和Ctrl键的状态组合,可以有如下情况:  标识符  功能描述  
 MK_CONTROL  Ctrl键被按下   

MK_LBUTTON  鼠标左键被按下   

MK_MBUTTON  鼠标中键被按下   

MK_RBUTTON  鼠标右键被按下   

MK_SHIFT  Shift键被按下 
当键被按下时,对应的标识符的值就为真。例如,在左键按下的响应中,如果Ctrl键同时被按下了,那么MK_CONTROL值为真,这样可以通过与操作及或操作来定义任意的按键组合。

 
point包含了无懈可击当前位置相对于屏幕左上角的X和Y坐标值。 滚轮的响应函数与上面的响应函数略有不同。 
afx_msg void OnMouseWheel(UINT nFlags, short zDelta, CPoint pt); nFlags和pt参数的含义同前面的nFlags和point,只说一下zDelta。 zDelta表示滚轮滚动的距离,是WHEEL_DELTA(被设定为120)的倍数,正数时,表示滚轮向前运动(离开用户的方向,我们通常说的向上),负数时则相反。 
这个WHEEL_DELTA是动作能否被响应的一个阈值。滚轮每滚过一个这样的距离才能响应一次。之所以设定WHEEL_DELTA,是为适应将来可能出现的高分辨率的甚至是可以自由滚动的滚轮而设计的。


我们提到了鼠标的按下和释放。如果我们在程序的窗口区按下鼠标,移出窗口后再释放鼠标,这时这个释放鼠标的操作就会丢失。就是说,如果没有采用鼠标捕获的话,当鼠标在你的客户区内的时候,你可以得到鼠标的消息,当它移出你的客户之后,你就得到到鼠标的消息了。为防止这种情况的发生,可以采用鼠标捕获的技术。 
在鼠标开始使用时用SetCapture函数捕获鼠标,当鼠标退出是用
ReleaseCapture函数释放捕获。通常会在OnLButtonDown里捕获鼠标,在OnLButtonUp里释放捕获。 
使用鼠标捕获时还必须注意的一点是系统中只能有一个程序调用SetCapture,在不使用时必须调用ReleaseCapture释放。而GetCapture可以知道当前哪个窗口调用了SetCapture。 
void SetCapture(); 
void ReleaseCapture(); 
调用ReleaseCapture时会产生一个WM_CAPTURECHANGED的消息。


转自:http://wenku.baidu.com/view/5e3d17660b1c59eef8c7b413.html



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值