Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Как узнать хендл контрола под курсором? (http://forum.oszone.net/showthread.php?t=165721)

crashtuak 31-01-2010 09:51 1334742

Как узнать хендл контрола под курсором?
 
Есть форма, на форме несколько контролов. Как узнать хендл контрола под курсором или просто по точке(а точку положения курсора получить несложно)?

pva 31-01-2010 12:50 1334852

Код:

POINT pt;
HWND result = (GetCursorPos(&pt) ? WindowFromPoint(&pt) : 0);


crashtuak 31-01-2010 13:15 1334866

Хм, чето данный пример не возвращает хендл кнопки, хотя хендл самого окна возвращает нормально...

pva 31-01-2010 16:41 1335078

Тогда так:
Код:

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 1335279

pva, извините, но я ошибся, первый вариант тоже мог быть рабочим, просто дело в том, что WM_MOUSEMOVE над кнопкой посылает сообщения в кнопку, а не в окно, потому то и не работал ваш код.


Время: 16:21.

Время: 16:21.
© OSzone.net 2001-