WM_COMMAND & WM_SYSCOMMAND
来源:互联网 发布:python可以开发app吗 编辑:程序博客网 时间:2024/05/16 07:13
WM_COMMAND & WM_SYSCOMMAND
对于菜单、加速键来说,点击后Windows会都会向它们所属的窗体发送WM_COMMAND消息。除了菜单、加速键,一些子窗体也会引发这些消息。例如对话框中的按钮或者工具栏中按钮(控件发通知消息给父窗体)。WM_COMMAND消息中有两个参数,wparam、lparam,定义如下:
wParam 高两个字节通知码
wParam 低两字节命令ID
lParam 发送命令消息的子窗体句柄。
对于菜单和加速键来说,lParam为0,只有控件此项才非0。命令ID也就是资源脚本中定义的菜单项的命令ID或者加速键的命令ID;菜单的通知码为0;加速键的通知码为1。
对于Windows菜单中菜单项和加速键,点击后,Windows会向所属的窗体发送WM_SYSCOMMAND,而不是WM_COMMAND消息。注意,WINDOWS菜单是系统菜单,也就是在标题栏点击鼠标左键的时候弹出的菜单。我们可以捕获WM_CREATE消息,加入自己的操作:GetSysMenu获取系统菜单句柄,然后对系统菜单进行操作,并且捕获添加菜单项(根据菜单命令ID)ID对应的WM_SYSCOMMAND消息进行处理。修改系统默认的菜单行为。
例如:#defineIDM_SELMENU 0x4444
else if ( uMsg == WM_CREATE)
{
HMENU hMenu = GetSystemMenu(hWnd,0);
AppendMenu(hMenu,0,IDM_SELMENU,"Show Hello");
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
else if ( uMsg == WM_SYSCOMMAND) //
{
if ( wParam << 16 >> 16 == 0x4444 )
{
MessageBox(NULL,"SysMenu:Show Hello MenuItem", "sysmenu info",MB_OK);
return 0;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
对于WM_SYSCOMMAND中如果是系统菜单的消息,我们没哟修改的,必须要交给DefWindowProc来处理,并且将返回值返回给Windows,不然你会发现不能拖动窗体、改变大小、最大最小化操作等。因为你如果不交给DefWindowProc处理,相当于屏蔽了SC_RESTORESC_MOVE SC_MAXIMIZE SC_MINIMIZE SC_CLOSE等等操作了。这些命令都是通过Windows投递WM_SYSCOMMAND消息,在DefWindowProc中进行处理的。
- WM_COMMAND & WM_SYSCOMMAND
- WM_COMMAND & WM_SYSCOMMAND
- WM_COMMAND & WM_SYSCOMMAND
- WM_COMMAND & WM_SYSCOMMAND
- WM_COMMAND & WM_SYSCOMMAND
- WM_COMMAND & WM_SYSCOMMAND详解
- WM_COMMAND & WM_SYSCOMMAND详解
- WM_SYSCOMMAND
- WM_SYSCOMMAND
- WM_COMMAND
- wm_command
- WM_COMMAND
- WM_COMMAND
- WM_COMMAND
- wm_command
- [VC++]WM_SYSCOMMAND
- WM_SYSCOMMAND 小结
- 什么是WM_COMMAND
- 第10课pl/sql语言之创建 包和过程等
- 【读书笔记】C程序中常见的内存操作有关的典型编程错误
- ios学习之生命周期
- SSL证书常用格式转换
- windows的磁盘操作之一——基本概念
- WM_COMMAND & WM_SYSCOMMAND
- [C# 基础知识系列]专题二:委托的本质论
- 测试题
- Publishing failed with multiple errors和Timeout waiting for Tomcat v5.5的解决方法
- windows的磁盘操作之二——初始化磁盘
- 泛型 java
- 怎样才算是个基督徒?
- 图像、帧、片、NALU(zz)
- 在Visual Assist X中增加Doxygen格式的注解的模板 [RT,修改]