Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объект под курсором мыши 
:(
    Опции темы
Dwyane
Дата 25.6.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 8.5.2007

Репутация: нет
Всего: 1



Люди, подскажите пожалуйста как найти id ну и координаты объекта над которым сейчас мыши находится. Как понятно, объект может принадлежать абсолютно любому запущенному приложению. Всем заранее большое спасибо!
PM MAIL   Вверх
586
Дата 25.6.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Координаты мыши определяются через GetCursorPos.
Хендл окна ищется через WindowFromPoint.
Идентификатор контрола можно узнать с помощью GetDlgCtrlID.
Координаты с помощью функции GetWindowRect.
PM   Вверх
Dwyane
Дата 25.6.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 8.5.2007

Репутация: нет
Всего: 1



Большое спасибо. А как тогда мы узнаем хендрел для объекта на форме? Мы же его должны передать для GetDlgCtrlID.
PM MAIL   Вверх
586
Дата 26.6.2008, 06:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Что подразумевается под словом объект? Если дочернее окно (кнопки, поля ввода и т.п.) их вернёт WindowFromPoint. Эта функция возвращает окно по координатам независимо от того, дочернее окно, или нет. Отличить дочерние окна от обычных можно по стилю WS_CHILD
Код
POINT pt;
GetCursorPos(&pt);
HWND hWnd = WindowFromPoint(pt);
if(GetWindowLong(hWnd, GWL_STYLE) & WS_CHILD)
{
    // дочернее окно
}

PM   Вверх
Earnest
Дата 26.6.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Нет, WindowFromPoint найдет только окно верхнего уровня, а дальше нужно искать с помощью ChildWindowFromPoint.



--------------------
...
PM   Вверх
586
Дата 26.6.2008, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(Earnest @  26.6.2008,  12:17 Найти цитируемый пост)
WindowFromPoint найдет только окно верхнего уровня

То, что и автору нужно - окно под курсором.
Цитата(Earnest @  26.6.2008,  12:17 Найти цитируемый пост)
дальше нужно искать с помощью ChildWindowFromPoint

Эта функция ищет окна по клиентским координатам родительского окна. Возвращает либо само родительское окно, либо дочернее окно, либо NULL, если выход за пределы окна.
PM   Вверх
Dwyane
Дата 26.6.2008, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 8.5.2007

Репутация: нет
Всего: 1



А WindowFromPoint будет работать если под курсором активх лежит?
Просто не понятно, почему Spy++ не находит такие елементы. Например:
в ворде Spy++ видит ToolBar. А самих кнопок не находит.

PM MAIL   Вверх
Earnest
Дата 26.6.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Потому что кнопки на тулбаре - это не окна.


--------------------
...
PM   Вверх
Dwyane
Дата 26.6.2008, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 8.5.2007

Репутация: нет
Всего: 1



А их как-то можно находить? Есть ли для этого АПИ какой-то?
PM MAIL   Вверх
Earnest
Дата 27.6.2008, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Ищи информацию o Toolbar control - сообщения с префиксом TB_ и прочее.


--------------------
...
PM   Вверх
FiMa1
Дата 30.6.2008, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: нет
Всего: 6



Получить заголовок окна по координате курсора - Еще даже с первой страницы 'C/C++: Системное программирование и WinAPI' не опустилось, можно было прямо Ctrl+F'ом искать...

Это сообщение отредактировал(а) FiMa1 - 30.6.2008, 08:45
PM   Вверх
Dwyane
Дата 30.6.2008, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 8.5.2007

Репутация: нет
Всего: 1



Такой подход не подойдет для не оконных объектов. Попробуй например ICQ, Winword toolbar.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0802 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.