Страница 2 из 2
Добавлено: 22 ноя 2004, 14:14
char_ser
ОГРОМНОЕ СПАСИБО!!!
Добавлено: 22 ноя 2004, 15:33
char_ser
А что делать в случае с контекстным меню? Ведь оно не посылает сообщения WM_COMMAND...
Добавлено: 24 ноя 2004, 13:45
Eugie
Видимо, вопрос естественным образом закрылся, но на всякий случай: 1) если контекстное меню системное (system menu, отображается при клике в левом вернем углу заголовка), оно посылает сообщения WM_SYSCOMMAND, их тоже можно ловить; 2) если оно пользоватьское - все зависит от способа вызова - указан или нет флажок TPM_NONOTIFY в TrackPopupMenu (в последнем случае, действительно, ловить нечего)
Добавлено: 24 ноя 2004, 14:54
Romeo
В последнем случае нужно ловить WM_COMMAND, который отсылает сэмулированный айтем главного меню. Ведь если разработчики сэмулировали выпадение подменю, то соответствующий айтем уже не popup, а обычный, как следствие он шлёт WM_COMMAND. Именно в command xэндлере этого айтема происходит вызов TrackPopupMenu.
Добавлено: 24 ноя 2004, 16:17
Eugie
Речь об обычном контекстном меню, в эмулированном, ессно, все может быть
Добавлено: 24 ноя 2004, 16:33
char_ser
В общем, сделаю наверное так:
Есть такая фигня "Detours":
http://research.microsoft.com/sn/detours/
Она позволяет перехватывать любые Win32 API функции, она специально для этого и разработана. (COOL)
Я перехватываю TrackPopupMenu(), в параметре hMenu у нее убиваю нужный мне пункт и передаю управление оригинальной TrackPopupMenu()
