сообщение WM_SYSCOMMAND

Окно получает это сообщение, когда пользователь выбирает команду в меню Окно (прежнее название — меню системы или управления) или когда пользователь нажимает кнопку развернуть, свернуть, восстановить или закрыть кнопку.

#define WM_SYSCOMMAND                   0x0112

Пример

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

Пример из классических примеров Windows на сайте GitHub.

Параметры

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
Выполняет приложение заставки, указанное в разделе [boot] файла System.ini.
SC_SIZE
0xF000
Размер окна.
SC_TASKLIST
0xF130
Активирует меню "Пуск ".
SC_VSCROLL
0xF070
Прокручивается по вертикали.

lParam

Слово нижнего порядка указывает горизонтальное положение курсора в координатах экрана, если команда меню окна выбирается с помощью мыши. В противном случае этот параметр не используется.

Слово высокого порядка указывает вертикальную позицию курсора в координатах экрана, если команда меню окна выбирается с помощью мыши. Этот параметр равен 1, если команда выбрана с помощью системного ускорителя, или нулю, если используется мнемонический.

Возвращаемое значение

Приложение должно возвращать ноль, если оно обрабатывает это сообщение.

Комментарии

Чтобы получить координаты положения в экранных координатах, используйте следующий код:

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

Функция DefWindowProc выполняет запрос меню окна для предопределенных действий, указанных в предыдущей таблице.

В WM_SYSCOMMAND сообщениях система использует четыре бита низкого порядка параметра wParam . Чтобы получить правильный результат при тестировании значения wParam, приложение должно объединить значение 0xFFF0 со значением wParam с помощью побитового оператора AND.

Элементы меню в меню окна можно изменить с помощью функций GetSystemMenu, AppendMenu, InsertMenu, ModifyMenu, InsertMenuItem и SetMenuItemInfo . Приложения, изменяющие меню окна, должны обрабатывать WM_SYSCOMMAND сообщения.

Приложение может в любой момент выполнить любую системную команду, передав сообщение WM_SYSCOMMANDв DefWindowProc. Все WM_SYSCOMMAND сообщения, не обрабатываемые приложением, должны передаваться в DefWindowProc. Все значения команд, добавленные приложением, должны быть обработаны приложением и не могут быть переданы в DefWindowProc.

Если защита паролем включена политикой, заставка запускается независимо от того, что приложение делает с уведомлением SC_SCREENSAVE , даже если не удается передать его в DefWindowProc.

Клавиши ускорителя, определенные для выбора элементов в меню окна, претворяются в WM_SYSCOMMAND сообщения; все остальные сочетания клавиш преобразовании в WM_COMMAND сообщения.

Если wParamSC_KEYMENU, lParam содержит код символа ключа, который используется с клавишей ALT для отображения всплывающего меню. Например, нажатие клавиш ALT+F для отображения всплывающего окна Файл приведет к WM_SYSCOMMAND с wParam равным SC_KEYMENU и lParam равным f.

Требования

Требование Значение
Минимальная версия клиента
Windows 2000 Professional [только классические приложения]
Минимальная версия сервера
Windows 2000 Server [только классические приложения]
Заголовок
Winuser.h (включая Windows.h)

См. также раздел

Справочные материалы

AppendMenu

DefWindowProc

GET_X_LPARAM

GET_Y_LPARAM

GetSystemMenu

InsertMenu

ModifyMenu

WM_COMMAND

Основные понятия

Сочетания клавиш