Войти

Показать полную графическую версию : [решено] Как узнать хендл контрола под курсором?


crashtuak
31-01-2010, 09:51
Есть форма, на форме несколько контролов. Как узнать хендл контрола под курсором или просто по точке(а точку положения курсора получить несложно)?

pva
31-01-2010, 12:50
POINT pt;
HWND result = (GetCursorPos(&pt) ? WindowFromPoint(&pt) : 0);

crashtuak
31-01-2010, 13:15
Хм, чето данный пример не возвращает хендл кнопки, хотя хендл самого окна возвращает нормально...

pva
31-01-2010, 16:41
Тогда так:

HWND result = 0;
POINT pt;
HWND parent = (GetCursorPos(&pt) ? WindowFromPoint(&pt) : 0);
if (parent)
{
MapWindowPoints(0, parent, &pt, 1);
result = ChildWindowFromPoint(parent, &pt);
}

ещё есть функция ChildWindowFromPointEx, которая может искать и невидимые окна, но в порядке Z-order
а ещё EnumChildWindows, которая перебирает вообще все окна, среди которых можно выбрать те, которые содержат точку

crashtuak
31-01-2010, 20:29
pva, извините, но я ошибся, первый вариант тоже мог быть рабочим, просто дело в том, что WM_MOUSEMOVE над кнопкой посылает сообщения в кнопку, а не в окно, потому то и не работал ваш код.




© OSzone.net 2001-2012