您的位置:首页 > 其它

第七章 Windows 游戏输入消息处理

2017-09-01 21:50 246 查看
虚拟键码与键盘消息

● 在
Windows
中, 所有键盘的按键都被定义为一组通用的“虚拟键码”也就是说在
windows
系统下所有按键都会被视为虚拟键(包括鼠标键在内),


而每一个虚拟键都有其对应的一个虚拟键码。

Windows
系统是一个消息驱动的环境,一旦我们在键盘上进行输入操作, 那么系统便会接收其对应的键盘消息。



当某一个按键被按下时, 伴随着这个操作所产生的是以 虚拟键码类型传送的
WM_KEYDOWN
WM_KEYUP
消息。 当程序接收到这些消息时。便可由虚拟键码的信息来得知是哪个按键被按下。

此外,
WM_CHAR
则是当按下的按键为定义于
ASCII
中的可打印字符时, 便发出此字符信息。

键盘消息处理

● 在
Windows
中键盘消息同样是在消息处理函数中间来处理的。


WM_KEYDOWN
WM_KEYUP
消息 这两种消息必须是成对发生的。 但我们往往在程序中对
WM_KEYDOWN
消息进行处理,而无视
WM_KEYUP
消息。


● 窗口过程函数有两个参数与消息输出有关, 它们就是——
wParam
lParam
.

LRESULT CALLBACK WndProc
(
_In_ HWND hwnd,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);


当键盘消息触发时,
wParam
的值 为按下按键的虚拟键码
, 在
windows
中所定义虚拟键码是以“VK_”开头的。

lParam
则是储存按键的相关状态信息,
因此, 如果我们的程序要对键盘输入操作进行处理, 就可以用一个
switch
语句来判断
wParam
中的内容并进行处理。


Windows 鼠标消息处理

● 处理鼠标消息的方法同样是在消息处理函数中加入要处理的鼠标消息类型,

当鼠标消息发生时,输入的参数
wParam 与 lParam 就储存了鼠标状态的相关信息。


lParam
参数


lParam
参数的值可分为高位字节与低位字节两个部分,其中高位部分储存的是鼠标光标所在的
X
坐标值,低位字节部分存储的则是鼠标光标所在的
Y
坐标值。


可以使用下面两个宏来取得鼠标的坐标值:

WORD LOWORD
(
DWORD dwValue  //返回鼠标光标所在的X坐标值

)


WORD HIWORD
(
DWORD dwValue  //返回鼠标光标所在的Y坐标值

)


注意:  这两个函数所返回的鼠标光标位置的坐标是相对于内部窗口左上点坐标的。


wParam 参数


wParam
参数的值记录着鼠标按键及键盘
Ctrl
键 与
Shift
的状态信息。


如果某个鼠标消息发生时,要测试鼠标左键是否也被按下, 就把`wParam` 拿着和 某种消息(逻辑与)一下。


● 我们就是这样利用
wParam
参数和测试标志来测试鼠标键是否被按下的。

当按键被按下时, 条件式 “
WParam
&
MK_LBUTTON
” 所传回的结果就会为 true。
当然, 若消息函数接收到 “
WM_LBUTTONDOWN
” 消息时, 同样也可以知道鼠标键被按下而不必再去额外做这样的测试

滚轮消息

鼠标滚轮转动消息
WM_MOUSEWHEEL
, 当鼠标滚轮转动消息发生时,
lParam
参数中的值同样是记录光标所在的位置的, 而
wParam
参数则分为 高位字节和低位字节两部分,


低位字节部分跟前面一样储存鼠标键与
Shift、 Ctrl
键的状态信息的,而高位字节部分的值会是 120 或 -120 120 表示鼠标滚轮向前转动, -120 表示鼠标滚轮向后转动。

这里的
wParam
高位组值与低位组值所在的函数同样是
HIWORD()
LOWORD()


HIWORD(wParam); // 高位组值,  值为 120或 -120

LOWORD(wParam); //  低位组值, 鼠标键以及 Shift 和 Ctrl 键的状态信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐