- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
【VisualC】游戏开发笔记十三游戏输入消息处理(二)鼠标消息处理
【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
本系列文章由zhmxy555编写,转载请注明出处。?/zhmxy555/article/details/7405479
作者:毛星云????邮箱:?happylifemxy@????欢迎邮件交流编程心得
上一节我们讲解了键盘消息处理相关的知识。键盘加鼠标作为目前人机交互方式依旧的主流,在讲完键盘消息处理之后接着讲鼠标消息处理,自然是理所当然的。
?这一节主要介绍各种鼠标消息的处理方式以及一些相关函数的运用方法,然后用一个小实例来巩固本节所学。
一,鼠标消息的处理方式
大家都知道,目前市场上主流鼠标规格为两个按键加上一个滚轮。那么,我们先列出Windows中这种鼠标设备输入时的消息:
WM_LBUTTONDBLCLK??????双击鼠标左键消息
WM_LBUTTONDOWN???????单击鼠标左键消息
WM_LBUTTONUP???????????松开鼠标左键消息
WM_MBUTTONDBLCLK?????双击鼠标中键(滚轮)消息
WM_MBUTTONDOWN??????单击鼠标中键(滚轮)消息
WM_MBUTTONUP??????????松开鼠标中键(滚轮)消息
WM_RBUTTONDBLCLK??????双击鼠标右键消息
WM_RBUTTONDOWN???????单击鼠标右键消息
WM_RBUTTONUP???????????松开鼠标右键消息
WM_MOUSEMOVE??????????鼠标移动消息
WM_MOUSEWHEEL?????????鼠标滚轮转动消息
处理鼠标消息的方法与处理键盘消息的方法类似,同样是在消息处理函数中加入要处理的鼠标消息类型,当鼠标消息发生时,输入的参数“wParam”与“lParam”则储存了鼠标状态的相关信息。
下面我们分别来展开讲解一下“wParam”与“lParam”参数以及滚轮消息。
lParam参数
lParam参数的值可分为高位字节与低位字节两个部分,其中高节部分储存的是鼠标光标所在的X坐标值,低位字节部分存储的则是鼠标光标所在的Y坐标值。
我们可以用下面两个函数来取得鼠标的坐标值:
WORD?LOWORD(lParam参数);???????????//返回鼠标光标所在的X坐标值
WORD?HIWORD(lParam参数);???????????//返回鼠标光标所在的Y坐标值
这两个两个函数所返回的鼠标光标位置的坐标是相对于内部窗口左上点坐标的。
2wParam参数
?wParam参数的值记录着鼠标按键及键盘【Ctrl】键与【Shift】键的状态信息,通过下面的这些定义在“WINUSER.H”中的测试标志与“wParam”参数来检查上述按键的按下状态。
MK_LBUTTON????????????按下鼠标右键
MK_MBUTTON???????????按下鼠标中(滚轮)键
MK_RBUTTON????????????按下鼠标右键
MK_SHIFT????????????????按下【Shift】键
MK_CONTROL????????????按下【Ctrl】键
【例子1】例如某一鼠标消息发生时,要测试鼠标左键是否也被按下,程序代码如下:
[cpp]?view plaincopyprint?
if(wParam??MK_LBUTTON)??????//这里应该是按位与,之前我写错了,谢谢?a443475601?的指出,??
{??
//鼠标左键被按下??
}??
这是利用wParam参数与测试标志来测试鼠标键是否被按下的方法。当按键被按下时,条件式“wParam??MK_LBUTTON”所传回的结果会为“true”。当然,若消息函数接收到“WM_LBUTTONDOWN”消息,同样也可以知道鼠标键被按下而不必再去额外做这样的测试。
【例子2】如果要测试鼠标左键与【Shift】键的按下状态,那么程序代码如下:
[cpp]?view plaincopyprint?
If(wParam??MK_LBUTTON)??
{??
If(wParam??MK_SHIFT)??
{??
//单击鼠标左键??
//按下【Shift】键??
}??
else??
{??
//单击鼠标左键??
//未按下【Shift】键??
}??
}??
else??
{??
If(wParam??MK_SHIFT)??
{??
//未单击鼠标左键??
//按下【Shift】键??
}??
else??
{??
//未单击鼠标左键??
//未按下【Shift】键??
}??
}??
我们通过这个例子可以清楚,如何利用“wParam”参数与测试标志来测试鼠标键及【Shift】键和【Ctrl】键是否被按下的方法。
3滚轮消息
这里我们要特别提一下
文档评论(0)