Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Окно получает это сообщение, когда пользователь выбирает команду из меню "Окно " (прежнее название — системное или управляющее меню) или когда пользователь выбирает кнопку "Развернуть", "Свернуть", "Восстановить" или "Закрыть".
#define WM_SYSCOMMAND 0x0112
Example
case WM_SYSCOMMAND:
if ((wParam & 0xFFF0) == SC_CLOSE)
{
EndDialog (hDlg, TRUE);
return(TRUE);
}
break;
Пример из классических примеров Windows на сайте GitHub.
Параметры
-
wParam
-
Тип запрошенной системной команды. Четыре бита с низким порядком параметра wParam используются внутренне системой. Биты 4-15 содержат код команды, который может быть одним из следующих значений.
Ценность Meaning - SC_CLOSE
- 0xF060
Закрывает окно. - SC_CONTEXTHELP
- 0xF180
Изменяет курсор на вопросительный знак указателем. Если пользователь щелкает элемент управления в диалоговом окне, элемент управления получает сообщение WM_HELP . - SC_DEFAULT
- 0xF160
Выбирает элемент по умолчанию; Пользователь дважды щелкнул меню окна. - SC_HOTKEY
- 0xF150
Активирует окно, связанное с заданным приложением горячим ключом. Параметр lParam определяет окно для активации. - SC_HSCROLL
- 0xF080
Прокручивается по горизонтали. - 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
Прокручивается по вертикали. Если код команды SC_SCREENSAVE, в четырех битах низкого порядка доступны следующие флаги:
Flag Meaning - SCF_ISSECURE
- 0x0001
Средство сохранения экрана безопасно. -
lParam
-
Слово с низким порядком указывает горизонтальную позицию курсора в координатах экрана, если выбрана команда меню окна с помощью мыши. В противном случае этот параметр не используется.
Слово с высоким порядком указывает вертикальную позицию курсора в координатах экрана, если выбрана команда меню окна с помощью мыши. Этот параметр равен 1, если команда выбрана с помощью системного акселератора или ноль при использовании mnemonic.
Возвращаемое значение
Приложение должно возвращать ноль, если оно обрабатывает это сообщение.
Замечания
Чтобы получить координаты позиции в координатах экрана, используйте следующий код:
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, 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 Профессиональный [только классические приложения] |
| Минимальный поддерживаемый сервер |
Windows 2000 Server [только классические приложения] |
| Header |
|
См. также
-
Справочные материалы
-
Концептуальный