Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

WM_CONTEXTMENU & Hooks (in Win2k) [D6, Win2k]


Fellomena ©   (2002-08-27 15:31:00) 

Всем привет!!!
Объясните в чём прикол, то ли лыжи не едут, то ли ещё чего ;)
Итак, посылаю я окну приложения сообщение WM_CONTEXTMENU и ничего не происходит.
Естественно контекстное меню предусмотренно.
Смотрю в SDK - может камни есть какие:

"The WM_CONTEXTMENU message notifies a window that the user clicked
the right mouse button (right clicked) in the window."

Ну да - всё так...
Ставлю глобальный hook WH_GETMESSAGE и проверяю все приходящие WM_ на
равенство их WM_CONTEXTMENU. Затем кликаю, как ошалелая во всех окнах правой
кнопкой мыши - меню выпадает, а hook не срабатывает.
Меняю условие, ловлю WM_RBUTTONDOWN и всё нормально, всё пашет.
Но в SDK вроде ясно сказанно, что WM_CONTEXTMENU message notifies a window that the user clicked
the right mouse button (right clicked) in the window, какие тут могут быть разночтения?

Может в Win2k упразнили WM_CONTEXTMENU и используют только WM_RBUTTONDOWN/WM_RBUTTONUP 8)))
Ладно, думаю, посмотрим. Включаю WinSight и делаю трассировочку нескольких приложений.
И что вы думаете - всегда при вызове контекстного меню приходит WM_RBUTTONDOWN и соответственно WM_RBUTTONUP.

Какие мысли?

P.S. Да, передача координат мыши в сообщениях типа WM_CONTEXTMENU осуществляется следующим образом:
xPos = LOWORD(lParam);
yPos = HIWORD(lParam);

Если я в формате $FFFFFFFF передам - всё ok будет? Или можно как-нибудь понагляднее?


Игорь Шевченко   (2002-08-27 16:18:00) [1]

Вообще-то после нажатия правой кнопки мыши Spy++ показывает сообщение WM_CONTEXTMENU (WM_RBUTTONDOWN, WM_NCHITTEST, WM_SETCURSOR, WM_RBUTTONUP, WM_CONTEXTMENU)

Может, в консерватории что-то поправить ?


MBo   (2002-08-27 16:08:00) [2]

просто функция сведения двух word в 1 Cardinal, очевидно,
(A shl 16) or B

например sendmessage(EM_CHARFROMPOS,0,MAKELPARAM(x, y))


Fellomena   (2002-08-27 16:01:00) [3]

Что значит MakeLParam?
Объясни plz.
Просто lParam 8)


MBo   (2002-08-27 15:55:00) [4]

относительно P.S ;)
MakeLParam имеется в виду?


Наверх

Титульная страница Поиск, карта сайта Написать письмо