Найти, какое дочернее окно MFC будет получать щелчок мыши - PullRequest
3 голосов
/ 19 мая 2010

Итак, у меня есть плагин для программы MFC. Я использую перехват событий мыши (из SetWindowsHookEx) для захвата кликов. В хост-приложении может быть открыто любое количество (возможно, перекрывающихся) дочерних окон, но я хочу только перехватывать щелчки в конкретном дочернем окне.

Есть ли способ выяснить в процедуре ловушки, какое из дочерних окон будет обрабатывать щелчок? Я предполагаю, что это что-то вроде перечисления всех дочерних окон, глядя на Z-порядок, но я очень незнаком с библиотеками MFC / Win32, и я не могу найти ни одной хорошей дискуссии о том, как перечислить все дочерние элементы и вычислить верхний.

Ответы [ 2 ]

4 голосов
/ 19 мая 2010

Может быть, API-функция WindowFromPoint отвечает всем требованиям?

Извлекает дескриптор окна, содержащего указанную точку.

В документации явно не упоминается Z-порядок, но я могу заверить вас из первых рук, что "содержит" неявно означает, что ни одно другое окно не находится впереди.

Есть еще несколько таких, с немного отличным поведением: ChildWindowFromPoint, ChildWindowFromPointEx и RealChildWindowFromPoint.

0 голосов
/ 19 мая 2010

Прошло много времени с тех пор, как я сделал MFC, но я думаю, что HitTest - это термин, который вы ищете. Быстрый трал через MSDN показывает, что в большинстве окон реализована функция HitTest, которая возвращает информацию о конкретной точке.

...