Окно получает это сообщение тогда, когда пользователь выбирает команду из Системного меню окна (прежде известное как системное или управляющее меню) или когда пользователь выбрал кнопку развертывания, свертывания, восстановления или закрытия окна.
WM_SYSCOMMAND WPARAM wParam LPARAM lParam; |
wParam
Устанавливает тип системной затребованной команды. Этим параметром может быть одно из ниже перечисленных значений.
Значение |
Предназначение |
SC_CLOSE | Закрывает окно. |
SC_CONTEXTHELP | Заменяет курсор на вопросительный знак с указателем. Если пользователь затем щелкает по органу управления в диалоговом окне, орган управления получает сообщение WM_HELP. |
SC_DEFAULT | Выбирает заданный по умолчанию пункт; пользователь дважды щелкнул в системном меню окна. |
SC_HOTKEY | Активизирует окно, связанное с определяемой прикладной программой "горячей" клавишей. Параметр lParam идентифицирует активизируемое окно. |
SC_HSCROLL | Прокручивает по-горизонтали. |
SC_KEYMENU | Извлекает системное меню окна как результат нажатия клавиши. Дополнительную информацию, см. в разделе Замечаний. |
SC_MAXIMIZE | Развертывает окно. |
SC_MINIMIZE | Свертывает окно. |
SC_MONITORPOWER | Устанавливает состояние дисплея. Эта команда поддерживает устройства, которые имеют энергосберегающие функции, типа персонального компьютера c батарейным питанием.
Параметр lParam может иметь ниже перечисленные значения: |
SC_MOUSEMENU | Извлекает системное меню окна в результате щелчка мышью. |
SC_MOVE | Перемещает окно. |
SC_NEXTWINDOW | Перемещает в следующее окно. |
SC_PREVWINDOW | Перемещает в предыдущее окно. |
SC_RESTORE | Восстанавливает окно в его обычной позиции и размерах. |
SC_SCREENSAVE | Запускается экранная заставка, определенная в разделе [boot] файла System.ini. |
SC_SIZE | Изменяет размеры окна. |
SC_TASKLIST | Активизирует меню Пуск (Start). |
SC_VSCROLL | Прокручивает по вертикали. |
lParam
Младшее слово устанавливает горизонтальную позицию курсора, в экранных координатах, если команда системного меню окна выбирается мышью. В противном случае, этот параметр не используется.
Старшее слово устанавливает вертикальную позицию курсора, в экранных координатах, если команда системного меню окна выбирается мышью. Этот параметр равен - (минус)1, если команда выбирается, используя системный ускоритель, или нуль при использовании мнемонической схемы.
Приложение должно возвратить нуль, если оно обрабатывает это сообщение.
Чтобы получить позицию координат в экранных координатах, используйте нижеследующий код:
xPos = GET_X_LPARAM(lParam); // горизонтальная позиция yPos = GET_Y_LPARAM(lParam); // вертикальная позиция |
Функция DefWindowProc выполняет требование системного меню окна о предопределенных действиях, указанных в таблице выше.
В сообщениях WM_SYSCOMMAND, четыре младших бита параметра wParam используются для внутренних потребностей системы. Чтобы получить правильный результат при проверке значения wParam, прикладная программа должна объединить значение 0xFFF0 со значением wParam при помощи использования побитового оператора AND.
Пункты в системном меню окна могут быть изменены при помощи использования функций GetSystemMenu, AppendMenu, InsertMenu, ModifyMenu, InsertMenuItem и SetMenuItemInfo. Прикладные программы, которые изменяют системное меню окна, должны обрабатывать сообщения WM_SYSCOMMAND.
Прикладная программа может выполнить любую команду системы в любое время, передавая сообщение WM_SYSCOMMAND в DefWindowProc. Любые сообщения WM_SYSCOMMAND, не обработанные программой должны быть переданы в DefWindowProc. Любые значения команд, добавленные приложением, должны быть обработаны прикладной программой и не могут быть переданы в DefWindowProc.
Клавиши-ускорители, которые определены для выбора пунктов из системного меню окна, преобразуются в сообщения WM_SYSCOMMAND; все другие нажатия клавиш - ускорителей преобразуются в сообщения WM_COMMAND.
Если wParam - SC_KEYMENU, lParam содержит символьный код клавиши, которая используется с клавишей ALT, чтобы показать на экране всплывающее меню. Например, нажмите ALT+F, чтобы показать на экране всплывающее меню Файл, которое вызовет WM_SYSCOMMAND с wParam, равным SC_KEYMENU, а lParam равным 'f'.
Обзор Ускорители клавиатуры, Уведомления, используемые ускорителями клавиатуры, AppendMenu, DefWindowProc, GET_X_LPARAM, GET_Y_LPARAM, GetSystemMenu, InsertMenu, ModifyMenu, WM_COMMAND
Размещение и совместимость WM_SYSCOMMAND | ||
К | Windows XP | Да |
л | Windows 2000 Professional | Да |
и | Windows NT Workstation | Да версии 3.1 и выше |
е | Windows Me | Да |
н | Windows 98 | Да |
т | Windows 95 | Да |
С | Windows Server 2003 | Да |
е | Windows 2000 Server | Да |
р | Windows NT Server | Да версии 3.1 и выше |
в | ||
е | ||
р | ||
Используемая библиотека | - | |
Используемая DLL | - | |
Заголовочный файл | ||
- объявлено в | Winuser.h | |
- включено в | Windows.h | |
Unicode | Нет | |
Замечания по платформе | Не имеется |