сообщение WM_SYSCOMMAND
Окно получает это сообщение, когда пользователь выбирает команду в меню Окно (прежнее название — меню системы или управления) или когда пользователь нажимает кнопку развернуть, свернуть, восстановить или закрыть кнопку.
#define WM_SYSCOMMAND 0x0112
Пример
case WM_SYSCOMMAND:
if ((wParam & 0xFFF0) == 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 [только классические приложения] |
Заголовок |
|
См. также раздел
-
Справочные материалы
-
Основные понятия