键盘消息
键盘消息分类
1.WM_KEYDOWN - 按键被按下时产生
2.WM_KEYUP - 按键被放开时产生
附带信息:WPARAM - 按键的Virtual Key
LPARAM - 按键的参数,例如按下次数
3.WM_SYSKEYDOWN - 系统键按下时产生 比如ALT、F10
4.WM_SYSKEYUIP - 系统键放开时产生字符消息
TranslateMessage在转换WM_KEYDOWN消息时,对于可见字符可以产生WM_CHAR,不可见字符无此消息
附带信息:
WPARAM - 输入的字符的ASCII字符编码值
LPARAM - 按键的相关参数TranslateMessage(&nMsg){
if(nMsg.message!=WM_KEYDOWN)
return;
判断nMsg.wParam(键码值)可以获知哪个按键被按下
if(不可见字符按键)
return;
查看CapsLock(大写锁定键)是否处于打开状态
if(打开)
PostMessage(nMsg.hwnd,WM_CHAR,大写字符编码值,...);
else
PostMessage(nMsg.hwnd,WM_CHAR,小写字符编码值,...);}
鼠标消息
鼠标消息的分类
基本鼠标消息
WM_LBUTTONDOWN - 鼠标左键按下
WM_LBUTTONUP - 鼠标左键抬起
WM_RBUTTONDOWN - 鼠标邮件按下
WM_RBUTTONUP - 鼠标右键抬起
WM_MOUSEMOVE - 鼠标移动消息
附带信息:
wPARAM:其他按键的状态,例如Ctrl/Shift等
IPARAM:鼠标的位置,窗口客户区坐标系
LOWORD X坐标位置
HIWORD Y坐标位置
一般情况鼠标按下/抬起成对出现。在鼠标移动过程中,会根据移动速度产生一系列的WM_MOUSEMOVE消息双击消息
WM_LBUTTONDBLCLK- 鼠标左键双击
WM_RBUTTONDBLCLK- - 鼠标右键双击
附带信息:
wPARAM:其他按键的状态,例如Ctrl/Shift等
IPARAM:鼠标的位置,窗口客户区坐标系
LOWORD X坐标位置
HIWORD Y坐标位置
消息产生顺序
以左键为例:
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDBLCLK
WM_LBUTTONUP
使用时需要在注册窗口类的时候添加CS_DBLCLKS风格滚轮消息
WM_MOUSEWHEEL - 鼠标滚轮消息
附带信息:
wPARAM:
LOWORD - 其他按键的状态
HIWORD - 滚轮的偏移量,通过正负值表示滚轮的滚动方向
正:向前滚动 负:向后滚动
IPARAM:鼠标的位置,屏幕坐标系
LOWORD X坐标位置
HIWORD Y坐标位置
使用:通过偏移量,获取滚动的方向和距离
定时器消息
定时器消息介绍
产生时间:在程序中创建定时器,当达到时间间隔时,定时器会向程序发送一个WM_TIMER消息。定时器的精度是毫秒,但是准确度很低。例如设置时间间隔为1000ms,但是会在非1000毫秒到达消息。
附带信息:
WPARAM:定时器ID
LPARAM:定时器处理函数的指针创建销毁定时器
创建定时器
UINT_PTR SetTimer{
HWND hWnd,//定时器窗口句柄
UINT_PTR nIDEvent,//定时器ID
UINT uElapse,//时间间隔
TIMERPROC lpTimerFunc//定时器处理函数指针(一般不用,为Null)
};创建成功,返回非0。
关闭定时器
BOOL KillTimer(
HWND hWnd,//定时器窗口句柄
UINT_PTR uIDEvent//定时器ID
)
菜单资源
1.菜单分类
窗口的顶层菜单 //标题栏下
弹出式菜单
系统菜单
HMENU类型表示菜单,ID表示菜单项。2.资源相关
资源脚本文件:*.rc文件
编译器:RC.EXE3.菜单资源的使用
添加菜单资源
加载菜单资源(3种方法)
1>注册窗口类时设置菜单
2>创建窗口传参设置菜单
3>在主窗口WM_CREATE消息中利用SetMenu函数设置菜单
加载菜单资源
HMENU LoadMenu(
HINSTANCE hInstance,
LPCTSTR lpMenuName
)4.命令消息的处理
WM_COMMAND
附带信息:
wPARAM:
HIWORD - 对于菜单为0
LOWORD - 菜单项的ID
IPARAM - 对于菜单为0//上下文菜单
显示上下文菜单
BOOL TrackPopupMenu(
HMENU hMenu,//菜单句柄
UINT uFlags,//显示方式
int x,//水平位置,屏幕坐标系
int y,//垂直位置,屏幕坐标系
int nReserved,//保留,必须为0
HWND hWnd,//处理菜单消息的窗口句柄
CONST RECT *prcRect//NULL,忽略
)TrackPopupMenu是阻塞函数WM_RBUTTONUP
鼠标右键弹起消息为窗口坐标系坐标,要使用需将其转换成屏幕坐标系坐标
WM_CONTETMENU
wParam:右键点击的窗口句柄
lPARAM:LOWORD X坐标,屏幕坐标系
HIWORD Y坐标,屏幕坐标系
WM_CONTETMENU消息是在WM_RBUTTONUP消息之后产生