Окт 16

Вызов меню

Когда пользователь делает щелчок правой кнопкой мыши, Windows отправляет окну приложения сообщение WM_RBUTT0ND0WN, содержащее клиентские координаты1 курсора мыши в момент щелчка. Кроме того, Windows отправляет сообщение WM_CONTEXTMENU, содержащее экранные координаты (screen coordinates) курсора мыши. Вы можете организовать вызов контекстного меню, обрабатывая любое из этих сообщений, при помощи функции TrackPopupMenuEx.
Второй параметр функции может содержать флаги, управляющие размещением полосы меню относительно позиции курсора мыши (х, у), и флаги, задающие некоторые другие характеристики. Обычно можно воспользоваться флагами по умолчанию, передавая этому параметру нулевое значение. По умолчанию левый верхний угол всплывающего меню привязывается к точке (х, у).
Параметрам х и у необходимо передать экранные координаты курсора мыши в момент щелчка правой кнопкой. Координаты курсора мыши можно извлечь из параметра IParam сообщения WM_RBUTTONDOWN или сообщения WM_CONTEXTMENU. Нужно только учесть, что сообщение WM_RBUTTONDOWN содержит клиентские координаты, поэтому при работе с этим сообщением необходимо преобразовать клиентские координаты в экранные координаты при помощи функции CLientToScreen.
Параметр hwnd содержит дескриптор окна, владеющего контекстным меню. Все сообщения от меню будут направляться этому окну. При помощи параметра Iptpm можно определить область экрана, которую меню не должно перекрывать. Чаще всего этому параметру передается значение NULL.
Функция не возвращает управление до тех пор, пока работа пользователя с меню не будет завершена выбором пункта или отказом от выбора.
Обработка сообщений, направляемых окну-владельцу от контекстного меню, не отличается от обработки сообщений, источником которых является основное меню.
Приемы работы с контекстным меню продемонстрируем на примере разработки конкретного приложения.