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知道控件句柄。

QQ截图20200905051908.jpg

WM_NOTIFY消息

WM_COMMAND可携带的信息较少,WM_NOTIFY比YWM_COMMAND功能更强大,可以存储一些额外的信息,

Edit,Button,ListBox等发送WM_COMMAND消息,

而ListView,Toolbar,Tree等控件发送WM_NOTIFY消息,因为需要提供的信息更多。因为有些控件功能和事件比较多

QQ截图20200905052156.jpg

QQ截图20200905052545.jpg

QQ截图20200905052657.jpg

Notification Code根据不同控件的命名规律:

Button按钮:    BN_XXX

ListBox列表框:    LBN_XXX

ComboBox组合框:    CBN_XXX

Tab框:    TBN_XXx

EN XXX :   Edit编辑框:

Static静态文本:    STN XXX


扩展阅读:msg结构:

	//msg结构:
	//HWND        hwnd;		主窗口句柄
	//UINT        message;	消息名称
	//WPARAM      wParam;	附加消息 键盘消息
	//LPARAM      lParam;	附加消息 鼠标消息(按键消息)
	//DWORD       time;		消息产生的时间
	//POINT       pt;		附加消息 鼠标消息(位置xy)
	MSG msg;