Windows消息分为三大类
标准消息:
所有WM_开头的消息 WM_COMMAND除外
命令消息:
来自菜单,工具条按钮或者加速键(快捷键)的消息,以WM_COMMAND呈现
通告消息:
由控件产生的消息 例如按钮的单击,列表框的选择,等 均产生此类消息,为的是向其父窗口通知事件的发生
WM_NULL 空消息,此消息将被接收窗口忽略
WM_CREATE 应用程序创建一个窗口
WM_DESTROY 一个窗口被销毁
WM_MOVE 移动一个窗口
WM_SIZE 改变一个窗口的大小
WM_ACTIVATE 一个窗口被激活或失去激活状态
WM_SETFOCus 获得焦点后
WM_PAINT 要求一个窗口重绘自己
WM_CLOSE 当一个窗口或应用程序要关闭时发送一个信号
WM_QUIT 用来结束消息循环,可调用PostQuitMessage()函数来产生此消息
WM_ERASEBKGND 当窗口背景必须被擦除时(例如在窗口改变大小时)
WM_MOUSEMOVE 鼠标移动
WM_LBUTTONDOWN 按下鼠标左键
WM_LBUTTONDBLCLK 双击鼠标左键
WM_RBUTTONDOWN 按下鼠标右键
WM_SIZING 调整窗口大小时发送此消息给窗口,通过此消息应用程序可以监视或修改窗口大小和位置
WM_MOVING 移动窗口时发送此消息给窗口,通过此消息应用程序可以监视或修改窗口大小和位置
WM_MDICREATE 发送此消息给多文档的客户窗口来创建一个MDI子窗口
WM_MDIDESTROY 发送此消息给多文档的客户窗口来关闭一个MDI子窗口
WM_MDIACTIVATE 发送此消息给多文档的客户窗口通知客户窗口激活另一个MDl子窗口
WM_MDINEXTMDI 客户窗口激活下一个或前一个窗口
WM_HOTKEY 当用户按下由RegisterHotKey()注册的热键时产生此消息
Windows消息远远不止这些,可以查询WM_开头的常量
为了防止用户定义的消息id与系统的消息id冲突,微软定义了一个宏,WM_USER,小于WM_USER的id被系统使用,大于WM_USER的id被用户使用
#define WM_USER 0x0400 //(十进制是1024)
所以假如需要自定义消息,id必须大于这个值
以下是消息编号的范围:
0~WM_USER-1 消息保留,仅供系统使用
WM_USER 到 0x7FFF 用于私有窗口类的整数型消息
WM_APP(0x80000) 到 0xFFFF 字符串供应应用程序使用
大于0xFFFF 系统保留
以WM_COMMAND表示,来自菜单,或加速键(快捷键)或工具栏按钮的消息
#define WM_COMMAND 0x0111 //(十进制273)
备注:
LOWORD(wParam)是菜单或加速键的ID,菜单的分隔条的ID为0。对于系统菜单的菜单
项和加速键,点击后,Windows会向所属的窗体发送WM_SYSCOMMAND,而不是WM_COMMAND消息。
以WM_COMMAND或WM_NOTIFY形式呈现的。表示,由各种控件产生的消息,
例如,按钮的单击等,为的是向其父窗口(通常是对话框)通知事件的发生。
备注
LOWORD(wParam)是控件ID,HIWORD(wParam)是notification code,比如BN_CLICKED,BN_DBLCLK等
标志用户对控件的操作,双击,单击之类。
件ID,通过IParam知道控件句柄。
WM_COMMAND消息:
当我们按下一个菜单选项,或者一个控件需要通知父窗口一个事件发生(如鼠标单击、双击等),或者快捷键被按下时,Windows将会发送一个WM_COMMAND消息给父窗口。并通过wParam高位置1或O区分菜单、快捷键、或者控件事件Code,通过wParam低位可知道菜单ID或控件ID,通过IParam知道控件句柄。
WM_NOTIFY消息
WM_COMMAND可携带的信息较少,WM_NOTIFY比YWM_COMMAND功能更强大,可以存储一些额外的信息,
Edit,Button,ListBox等发送WM_COMMAND消息,
而ListView,Toolbar,Tree等控件发送WM_NOTIFY消息,因为需要提供的信息更多。因为有些控件功能和事件比较多
Notification Code根据不同控件的命名规律:
Button按钮: BN_XXX
ListBox列表框: LBN_XXX
ComboBox组合框: CBN_XXX
Tab框: TBN_XXx
EN XXX : Edit编辑框:
Static静态文本: STN XXX
//msg结构: //HWND hwnd; 主窗口句柄 //UINT message; 消息名称 //WPARAM wParam; 附加消息 键盘消息 //LPARAM lParam; 附加消息 鼠标消息(按键消息) //DWORD time; 消息产生的时间 //POINT pt; 附加消息 鼠标消息(位置xy) MSG msg;