У меня есть ListView, с которым я хотел бы использовать контекстное меню, которое меняется в зависимости от выбора. Я удостоверяюсь, что я могу сначала отобразить меню, когда правая кнопка мыши была отпущена (согласно обычному поведению контекстного меню).
В моем ListView WNDPROC
я использую WM_CONTEXTMENU
для отображения контекстного меню. Однако меню отображается в том месте, где курсор начал выделение, а не в конце.
Из документации MS:
DefWindowProc генерирует сообщение WM_CONTEXTMENU, когда он обрабатывает сообщение WM_RBUTTONUP или WM_NCRBUTTONUP или когда пользователь набирает SHIFT+F10. Сообщение WM_CONTEXTMENU также генерируется, когда пользователь нажимает и отпускает клавишу VK_APPS.
Когда я проверяю стек вызовов с точкой останова в WM_CONTEXTMENU
, я вижу, что сообщение, отправленное до WM_CONTEXTMENU
, было 0x0204
или WM_RBUTTONDOWN
и содержало координаты курсора в это время. Это, вероятно, объясняет проблему с расположением меню, но почему это происходит?
Когда я удерживаю ПКМ за пределами ListView и отпускаю его внутри, контекстное меню все еще появляется, и я вижу из стека вызовов, что последним сообщением было 0x0205
или WM_RBUTTONUP
.
Не уверен, что у меня что-то не так в моем коде, или я чего-то не понимаю. Любая помощь по этому вопросу будет принята с благодарностью, спасибо.
WM_CONTEXTMENU
дает лиGetMessagePos()
правильные координаты, которые вы ищете? - person Remy Lebeau   schedule 23.10.2020WM_RBUTTONUP
послеWM_CONTEXTMENU
, что приводит к тому, чтоGetMessagePos()
получает от него координаты мыши? - person Synthetic Ascension   schedule 23.10.2020WM_CONTEXTMENU
? - person Remy Lebeau   schedule 23.10.2020LPARAM
содержатся в сообщенииWM_RBUTTONDOWN
. - person Synthetic Ascension   schedule 23.10.2020