Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Как получить HWND окна под мышью


Автор: MuForum 17.8.2009, 12:50
Добрый день.

# Задача: Получить HWND окна которое находится под мышью/курсором.
- Проблема возникает в следующем, что ниже показанный код возвращает HWND контрола, если мышка над ним, а не HWND окна.
Код

    HWND hWnd = NULL;
    POINT p;
    char cClass[MAX_PATH], cCaption[MAX_PATH];
    memset(cClass, 0, MAX_PATH);
    memset(cCaption, 0, MAX_PATH);
    // ----
    GetCursorPos(&p);
    hWnd = WindowFromPoint(p);
    // ----
    GetClassName(hWnd, cClass, MAX_PATH);
    GetWindowText(hWnd, cCaption, MAX_PATH);



P.S. -> Прошу помощи.

Автор: GremlinProg 17.8.2009, 12:54
просто дополни код после hWnd = WindowFromPoint(p):
Код

while( hwndParent = ::GetAncestor(hWnd,GA_PARENT) ){
  hWnd = hwndParent;
}

Автор: MuForum 17.8.2009, 12:59
#2,  - К сожалению не помогло =(
Код

    HWND hWnd = NULL, hwndParent = NULL;
    POINT p;
    char cClass[MAX_PATH], cCaption[MAX_PATH];
    memset(cClass, 0, MAX_PATH);
    memset(cCaption, 0, MAX_PATH);
    // ----
    GetCursorPos(&p);
    hWnd = WindowFromPoint(p);
    // ----
    while(hwndParent = ::GetAncestor(hWnd, GA_PARENT))
    {
        hWnd = hwndParent;
    }
    // ----
    GetClassName(hWnd, cClass, MAX_PATH);
    GetWindowText(hWnd, cCaption, MAX_PATH);

Результат:
cClass = "#32769";
cCaption = ""; (Путой)

P.S. -> Идеи?

Автор: cristaloleg 17.8.2009, 12:59
А как узнать компанент который находится под мышью???

Автор: GremlinProg 17.8.2009, 13:06
все нормально, 32769 - это десктоп,
просто не нужно указывать родителя при создании "корневого" окна - фрейма

но как вариант - можно просто исключить его из обхода:
Код

while( hwndParent = ::GetAncestor(hWnd,GA_PARENT) ){
  if( hwndParent == ::GetDesktopWindow() ){
    break;
  }
  hWnd = hwndParent;
}


Добавлено через 2 минуты и 8 секунд
Цитата(cristaloleg @  17.8.2009,  14:59 Найти цитируемый пост)
А как узнать компанент который находится под мышью???

MuForum, как раз и пришел с такой задачей, смотри первый пост

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)