上一节我们讲了Windows是由事件驱动的,任何事件都会被封装成消息,并保存在系统创建的MSG结构里
typddef struct tagMSG{
HWND hWnd; 窗口句柄
UINT Message; 消息的id
WPARAM wParam; 消息的附加信息
LPARAM lParam; 消息的附加信息
DWORD time; 消息产生的事件
POINT ps 消息产生的坐标
}MSG;
消息的本质其实只是一个32位无符号整数,每一个消息对应着一个事件
消息分为两类 队列消息和非队列消息 (非队列消息只有WM_CREATE 和WM_SIZE消息) 非队列消息一产生立即被处理
1:鼠标消息
WM_MOUSEMOVE 鼠标移动消息
WM_MOUSEWHEEL
左键
WM_LBUTTONDOWN 鼠标左键按下消息
WM_LBUTTONNP 鼠标左键弹起消息
WM_LRUTTONDBCLICHK 鼠标左键双击消息
右键
WM_RBUTTONDWON 鼠标右键按下消息
WM_RBUTTONUP 鼠标右键弹起消息
WM_RRUTTONDBCLICHK 鼠标右键双击消息
鼠标双击消息会需要在窗口风格添加CS_DBLCLKS 双击消息会覆盖第二次按下消息
鼠标消息LPARAM里保存着鼠标的位置信息 WPARAM里保存着键盘的按键消息
2:键盘消息
键盘按键分为两种,系统按键 和非系统按键(处了ALT 和F10其他的都是非系统按键)
WM_KEYDOWN 非系统按键按下消息
WM_KEYUP 非系统按键弹起消息
WM_SYSKEYDOWN 系统按键按下消息
WM_SYSKEYUP 系统按键弹起消息
键盘消息里LPARAM不起任何作用 WPARAM里的低16位保存着虚拟键值
3:系统消息
WM_CREATE 窗口创建之后显示之前产生的消息
WM_SIZE 窗口大小发送改变的时候产生的消息 (值得注意的是窗口刚创建的时候窗口的大小为0)可通过
LOWORD(lParam) 宽 HIWORLD(lParam) 高
4:定时器消息
WM_TIMER 定时消息
SetTimer 第四个参数为NULL时就会每个一定的事件产生一个定时器消息 LOWORD(wParam)低16位保存着定时器的ID
可以设置多给定时器 比如游戏的技能CD如果技能释放后需要固定的时间冷缺使用的都是定时器
5:设备改变消息
WM_DEVICECHANGE 设备改变
当计算机上有任何外设接入和拔出时会产生该消息 对附加信息进行个处理够是被插入和拔出的设备
6:窗口重绘消息
WM_PAINT 窗口重绘消息 所有绘图动作 (窗口大小发生改变自己产生的消息 窗口大小发生改变
7:系统菜单处理消息
WM_COMMAND 该消息处理所有菜单消息 弹出式菜单和顶层菜单
WM_SYSCOMMAND 该消息处理系统菜单的消息
WPARAM的低16位保存着菜单的ID
菜单将在我们的下一节中讲到 这些消息就是我们比较常用用到的消息了