Сообщение WM_SYSCOMMAND
Сообщение WM_SYSCOMMAND приходит в функцию окна приложения, когда пользователь выбирает строку из системного меню. Параметр wParam, как и для сообщения WM_COMMAND, содержит идентификатор строки меню, в данном случае, идентификатор строки системного меню. Параметр lParam не используется (за исключением идентификатора SC_HOTKEY).
Приведем список идентификаторов с кратким описанием.
Идентификатор | Описание |
SC_CLOSE | Удаление окна (строка "Close") |
SC_HOTKEY | Активизация окна, связанного с комбинацией клавиш, определенной приложением. Младшее слово параметра lParam содержит идентификатор активизируемого окна |
SC_HSCROLL | Свертка по горизонтали |
SC_KEYMENU | Выбор из меню при помощи комбинации клавиш |
SC_MAXIMIZE или SC_ZOOM | Максимизация окна (строка "Maximize") |
SC_MINIMIZE или SC_ICON | Минимизация окна (строка "Minimize") |
SC_MOUSEMENU | Выбор из меню при помощи мыши |
SC_MOVE | Перемещение окна (строка "Move") |
SC_NEXTWINDOW | Переключение на следующее окно |
SC_PREVWINDOW | Переключение на предыдущее окно |
SC_RESTORE | Восстановление нормального положения и размера окна |
SC_SCREENSAVE | Запуск приложения, предназначенного для предохранения экрана дисплея от преждевременного выгорания (screen-saver application), определенного в разделе [boot] файла system.ini |
SC_SIZE | Изменение размера окна (строка "Size") |
SC_TASKLIST | Запуск или активизация приложения Task Manager |
SC_VSCROLL | Свертка по вертикали |
При анализе параметра wParam учтите, что младшие четыре бита этого параметра могут принимать любые значения и должны игнорироваться:
if((wParam & 0xfff0) == SC_SIZE) { return 0; }
Скоро мы расскажем вам о том, как можно добавлять строки в системное меню. При добавлении строк в системное меню вы должны указывать идентификатор строки. Этот идентификатор (с учетом сказанного выше относительно младших четырех битов) вы получите в параметре wParam сообщения WM_SYSCOMMAND при выборе добавленной вами строки.
Создав собственный обработчик для сообщений, приходящих от системного меню, вы можете блокировать отдельные или все строки этого меню. Для блокировки какой-либо строки соответствующий обработчик должен вернуть нулевое значение, как в приведенном выше фрагменте кода, блокирующем изменение размера окна.