Сообщения, используемые с меню

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

Когда пользователь активирует элемент на панели меню, окно-владелец впервые получает сообщение WM_SYSCOMMAND . Это сообщение содержит флаг, который указывает ли пользователь активирован меню с помощью клавиатуры (SC_KEYMENU) или мыши (SC_MOUSEMENU). Дополнительные сведения содержатся в разделе Доступ с клавиатуры в меню.

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

Когда пользователь указывает на элемент меню, которое открывается подменю, система посылает окно-владелец WM_INITMENUPOPUP сообщение перед отображением в подменю. Это сообщение предоставляет приложению возможность изменения в подменю перед его отображением.

Каждый раз, когда пользователь перемещает выделение из одного пункта в другой, система отправляет WM_MENUSELECT сообщение процедуре окна меню Окно-владелец. Это сообщение идентифицирует элемент текущего выбранного меню. Многие приложения предоставляют информационное пространство в нижней части их основных окна и использовать это сообщение для отображения дополнительных сведений о выбранном меню.

Когда пользователь выбирает элемент команды из меню, система отправляет сообщения WM_COMMAND процедуре окна. Младшее слово параметра wParam сообщения WM_COMMAND содержит идентификатор выбранного пункта. Процедура окна следует изучить идентификатор и соответственно обрабатывать сообщение.

Не все меню доступны через меню окна. Многие приложения отображения контекстных меню, когда пользователь щелкает правой кнопкой мыши в определенном месте. Такие приложения должны обрабатывать сообщение WM_CONTEXTMENU и отобразить контекстное меню, если это уместно. Если приложение не отображает контекстное меню, она должна пройти сообщение WM_CONTEXTMENU в функцию DefWindowProc для обработки по умолчанию.

Index