WM_SYSCOMMAND消息

当用户从 “窗口 ”菜单中选择命令时,窗口会收到此消息, (以前称为系统或控件菜单) ,或者当用户选择最大化按钮、最小化按钮、还原按钮或关闭按钮时。

#define WM_SYSCOMMAND                   0x0112

示例

 case WM_SYSCOMMAND:
        if (wParam == SC_CLOSE)
        {
            EndDialog (hDlg, TRUE);
            return(TRUE);
        }
        break;

GitHub上Windows经典示例的示例。

参数

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
设置显示的状态。 此命令支持具有节能功能的设备,例如电池供电的个人电脑。
lParam 参数可以具有以下值:
  • -1 (显示器开机)
  • 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

低序单词指定光标的水平位置(以屏幕坐标为单位)(如果使用鼠标选择窗口菜单命令)。 否则,不使用此参数。

高序单词指定光标的垂直位置(以屏幕坐标为单位)(如果使用鼠标选择窗口菜单命令)。 如果使用系统加速器选择命令,则此参数为 1;如果使用助记键,则为 1。

返回值

如果应用程序处理此消息,则应用程序应返回零。

注解

若要获取屏幕坐标中的位置坐标,请使用以下代码:

xPos = GET_X_LPARAM(lParam);    // horizontal position 
yPos = GET_Y_LPARAM(lParam);    // vertical position

DefWindowProc 函数对上表中指定的预定义操作执行窗口菜单请求。

WM_SYSCOMMAND 消息中, wParam 参数的四个低序位由系统内部使用。 若要在测试 wParam 的值时获取正确的结果,应用程序必须使用按位 AND 运算符将值0xFFF0与 wParam 值组合在一起。

可以使用 GetSystemMenu、AppendMenu、InsertMenu、ModifyMenu、InsertMenuInsertMenuItemSetMenuItemInfo 函数修改窗口菜单中的菜单项。 修改窗口菜单的应用程序必须处理 WM_SYSCOMMAND 消息。

应用程序可以通过将 WM_SYSCOMMAND 消息传递给 DefWindowProc,随时执行任何系统命令。 应用程序未处理的任何 WM_SYSCOMMAND 消息都必须传递给 DefWindowProc。 应用程序添加的任何命令值都必须由应用程序处理,并且无法传递给 DefWindowProc

如果策略启用了密码保护,则无论应用程序对 SC_SCREENSAVE 通知执行什么操作,屏幕保护都会启动,即使无法将其传递给 DefWindowProc 也是如此。

定义为从窗口菜单中选择项的快捷键将转换为 WM_SYSCOMMAND 消息;所有其他加速器击键将转换为 WM_COMMAND 消息。

如果 wParamSC_KEYMENU则 lParam 包含与 ALT 键一起使用的键的字符代码以显示弹出菜单。 例如,按 Alt+F 显示“文件”弹出窗口将导致 wParam 等于 SC_KEYMENU 且 lParam 等于“f”的WM_SYSCOMMAND

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Winuser.h (包括 Windows.h)

另请参阅

引用

AppendMenu

DefWindowProc

GET_X_LPARAM

GET_Y_LPARAM

GetSystemMenu

InsertMenu

ModifyMenu

WM_COMMAND

概念性

键盘加速键