第七章 Windows 游戏输入消息处理
2017-09-01 21:50
246 查看
虚拟键码与键盘消息
● 在
而每一个虚拟键都有其对应的一个虚拟键码。
●
当某一个按键被按下时, 伴随着这个操作所产生的是以 虚拟键码类型传送的
此外,
键盘消息处理
● 在
● 窗口过程函数有两个参数与消息输出有关, 它们就是——
当键盘消息触发时,
那
Windows 鼠标消息处理
● 处理鼠标消息的方法同样是在消息处理函数中加入要处理的鼠标消息类型,
当鼠标消息发生时,输入的参数
●
可以使用下面两个宏来取得鼠标的坐标值:
●
● 我们就是这样利用
当按键被按下时, 条件式 “
滚轮消息
鼠标滚轮转动消息
低位字节部分跟前面一样储存鼠标键与
这里的
● 在
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 键的状态信息
相关文章推荐
- 第7章 做游戏的主人——Windows游戏输入消息处理
- 【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
- 游戏开发笔记十二 游戏输入消息处理(一) 键盘消息处理
- 游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
- 【Visual C++】游戏开发笔记十二 游戏输入消息处理(一) 键盘消息处理
- 【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
- 【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
- [原]【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
- 【Visual C++】游戏开发笔记十二 游戏输入消息处理(一) 键盘消息处理
- 【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
- 【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
- 【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
- 【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
- 【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
- 【Visual C++】游戏开发笔记十二 游戏输入消息处理(一) 键盘消息处理
- 【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
- 【Visual C++】游戏开发笔记十二 游戏输入消息处理(一) 键盘消息处理
- 【Visual C++】游戏开发笔记十二 游戏输入消息处理(一) 键盘消息处理
- [原]【Visual C++】游戏开发笔记十二 游戏输入消息处理(一) 键盘消息处理
- 游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理