鱼C论坛

 找回密码
 立即注册
查看: 4768|回复: 0

[API档案] WM_SYSCOMMAND 消息

[复制链接]
发表于 2016-3-15 14:24:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
注:本文档由 Diu 翻译,小甲鱼校对。

消息含义:

当用户从窗口菜单(前身叫做系统菜单或控制菜单)选择一个命令或者当用户选择最大化按钮,最小化按钮,恢复按钮或关闭按钮时,消息接收窗口便会收到这种消息。


消息定义:

  1. #define WM_SYSCOMMAND                   0x0112
复制代码


参数解析:

wParam:指定被请求的系统命令的类型,可以是下列值中的一个。

含义
SC_CLOSE(0xF060) 关闭窗口
SC_CONTEXTHELP(0xF180) 将鼠标光标改变为一个带有指针的问号。如果用户单击对话框中的控件,这个控件将会接受到一条 WM_HELP 消息
SC_DEFAULT(0xF160) 选择默认菜单项;用户双击窗口菜单
SC_HOTKEY(0xF150) 激活与该应用程序指定热键关联的窗口,lParam 参数标识要激活的窗口
SC_HSCROLL(0xF080) 水平滚动
SCF_ISSECURE(0x00000001) 指示屏幕保护程序是否是安全的
SC_KEYMENU(0xF100) 将窗口菜单作为一个按键的结果;更多有关信息请参见备注部分
SC_MAXIMIZE(0xF030) 将窗口最大化
SC_MINIMIZE(0xF020) 将窗口最小化
SC_MONITORPOWER(0xF170)1. 设置显示的状态
2. 此命令支持具有节电功能特性的设备,如电池供电的个人计算机
SC_MOUSEMENU(0xF090) 将窗口菜单作为一个鼠标单击的结果
SC_MOVE(0xF010) 移动窗口
SC_NEXTWINDOW(0xF040) 移动到下一个窗口
SC_PREVWINDOW(0xF050) 移动到上一个窗口
SC_RESTORE(0xF120) 将窗口恢复到正常的位置和大小
SC_SCREENSAVE(0xF140) 执行在 System.ini 文件的 [boot] 段指定的屏幕保护程序
SC_SIZE(0xF000) 改变窗口的大小
SC_TASKLIST(0xF130) 激活开始菜单
SC_VSCROLL(0xF070) 垂直滚动

lParam:

在屏幕坐标中,如果用鼠标选择窗口菜单命令。lParam 的低位字指定指针的水平位置,否则,不使用此参数。
        
在屏幕坐标中,如果用鼠标选择窗口菜单命令。lParam 的高位字指定指针的垂直位置,如果一个命令是通过系统加速器选择的,那么这个参数值为 -1,如果是通过助记符选择的,则为 0。


返回值:

如果处理这个消息,应用程序应该返回 0。


备注:

1. 使用下面的代码来获取屏幕坐标中的位置坐标:
  1. xPos = GET_X_LPARAM(lParam);    // 水平位置
  2. yPos = GET_Y_LPARAM(lParam);    // 垂直位置
复制代码

2. DefWindowProc 函数以预定义的行为执行上表中指定的窗口菜单请求。

3. 在 WM_SYSCOMMAND 消息中,wParam 的四个低序位是由系统内部使用的,当测试 wParam 的值时,为了获取正确的结果,应用程序必须将 0xFFF0 和 wParam 的值进行按位 AND 操作。

4. 使用 GetSystemMenu, AppendMenu, InsertMenu, ModifyMenu, InsertMenuItemSetMenuItemInfo 函数能够修改窗口菜单中的菜单项,修改窗口菜单的应用程序必须处理 WM_SYSCOMMAND 消息。

5. 应用程序可以在任何时间通过传递一个 WM_SYSCOMMANG 消息给 DefWindowProc 来执行系统命令,任何没有被程序处理的 WM_SYSCOMMAND 消息必须传递给 DefWindowProc。由应用程序添加任何命令值必须由应用程序处理,并且不能被传递给 DefWindowProc

6. 如果启用密码保护策略,无论应用程序对 SC_SCREENSAVE 通知做什么处理——甚至未能将其传递给 DefWindowProc,屏幕保护程序都会启动。

7. 被定义从窗口菜单选取菜单项的加速键会被转换成 WM_SYSCOMMAD 消息,其他的加速键按键消息将被转换为 WM_COMMAND 消息。

8. 如果 wParam 值为 SC_KEYMENU,lParam 参数会包含与 ALT 键一同使用来显示弹出式菜单的
键的字符代码。例如,按 ALT + F 来显示文件弹出式菜单将会引发一个 WM_SYSCOMMAND 消息,其中 wParam 等于 SC_KEYMENU,lParam 等于 'f'。


需求:

最小支持客户端 Windows 2000 专业版 [仅桌面应用程序]
最小支持服务器端 Windows 2000 服务器版 [仅桌面应用程序]
头文件 Winuser.h(包含于 Windows.h)


【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 03:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表