1、WM_SYSCOMMAND
OnSysCommand()这个函数主要是截获控制命令的,msdn上的解释如下:
The framework calls this member function when the user selects a command from the Control menu, or when the user selects the Maximize or the Minimize button.
对于Windows菜单中菜单项和加速键(加速键指跨界按钮?),点击后,Windows会向所属的窗体发送WM_SYSCOMMAND,而不是WM_COMMAND消息。
注意:WINDOWS菜单是系统菜单,也就是在标题栏点击鼠标左键的时候弹出的菜单。尤其是最大化和最小化窗口的时候,比如现在软件的流行的点关闭按钮,不是退出而是隐藏的情况,就可以在这里来实现。
参考:https://blog.csdn.net/autumn20080101/article/details/7577619
https://blog.csdn.net/gxj1680/article/details/3549656
原型:afx_msg void OnSysCommand( UINT nID, LPARAM lParam ),参数:
nID | 指定了请求的系统命令的类型。这个参数可以是下列值之一:
| ||||||||||||||||||||||||||||||
lParam | 如果控制菜单是通过鼠标选择的,则lParam中包含了光标的位置。低位字包含了x轴坐标,高位字包含了y轴坐标;否则这个参数没有使用。
|
说明:
当用户从控制菜单选择了一个命令,或者用户选择了最大化户最小化按钮时,框架调用这个函数。
在缺省情况下,OnSysCommand执行控制菜单对前面表格中描述的预定义动作的请求。
在WM_SYSCOMMAND消息中,nID参数的低四位被Windows内部使用。当应用程序测试nID的值时,它必须用位与操作符AND将值0xFFF0与nID的值组合在一起以获得正确的结果。
为选择控制菜单中的项的加速键(快捷方式)被转换为OnSysCommand调用;所有其它的加速键被转换为WM_COMMAND消息。
参考:https://blog.csdn.net/trustnature/article/details/7793905
2、WM_COMMAND
WM_COMMAND产生的条件:点击菜单, 点击加速键,点击子窗口按钮,点击工具栏按钮。这些时候都有command消息产生。
WM_COMMAND消息中有两个参 数,wparam、lparam,定义如下:
wParam 高两个字节 通知码
wParam 低两字节 命令ID
lParam 发送命令消息的子窗体句柄。
对于菜单和加速键来说,lParam为0,只有控件此项才非0。命令ID也就是资源脚本中定义的菜单项的命令ID或者加速键的命令ID;菜单的通知码为0;加速键的通知码为1。
参考:https://www.cnblogs.com/qq78292959/p/3564340.html
当用户点击菜单、按钮、下拉列表框等控件时候,会触发WM_COMMAND
LOWORD(wParam) 是控件或菜单或加速键的ID,菜单的sparator的ID为0
如果LOWORD(wParam) 是控件ID,HIWORD(wParam)是notification code, 比如BN_CLICKED, BN_DBLCLK等,标志用户对控件的操作,双击,单击之类。
如果LOWORD(wParam) 是菜单ID,HIWORD(wParam)是0。
如果LOWORD(wParam) 是加速符ID,HIWORD(wParam)是1。
如果LOWORD(wParam) 是控件ID,lParam是控件的句柄值,否则为NULL。其实,GetDlgItem(hWnd, LOWORD(wParam)) == lParam。
Notification Code的命名规律:
列表框: LBN_*****
组合框: CBN_****
Tab框: TBN_****
按钮: BN_*****
Edit : EN_*****
参考:https://blog.csdn.net/qihuanfengyun/article/details/37545723