Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2012, 17:27   #1
sevoan
 
Регистрация: 07.01.2011
Сообщений: 8
По умолчанию Проверка положения курсора на элементе окна

Такой вопрос - каким алгоритмом система проверяет что точка (курсор) находится на одном из четырехугольнике (кнопке) окна.
sevoan вне форума Ответить с цитированием
Старый 01.03.2012, 17:37   #2
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Попробуй воспользоваться утилитой Spy++(VS2008, 2010), и посмотри какие сообщения приходят при наведении курсора на кнопку.
Эти сообщения приходят в системную очередь сообщений,а оттуда в очередь для сообщений окна, где выгребаются функцией.
По-моему так.
Желание тысяча возможностей, нежелание - тысяча причин
Стремящийся вне форума Ответить с цитированием
Старый 01.03.2012, 17:38   #3
sevoan
 
Регистрация: 07.01.2011
Сообщений: 8
По умолчанию

Спасибо, попробую, но кто уже сталкивался с таким вопросом - отпишитесь!
sevoan вне форума Ответить с цитированием
Старый 01.03.2012, 17:43   #4
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Есть хорошая книга Щупак WinApi, советую
Желание тысяча возможностей, нежелание - тысяча причин
Стремящийся вне форума Ответить с цитированием
Старый 01.03.2012, 17:55   #5
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

В оконную процедуру посылается WM_NCHITTEST.
Окно возвращает HTCLIENT. А может, например, вернуть HTCAPTION.
Это, кстати, часто используется в теме "как таскать окно за любое место". )
EUGY вне форума Ответить с цитированием
Старый 01.03.2012, 18:00   #6
sevoan
 
Регистрация: 07.01.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
В оконную процедуру посылается WM_NCHITTEST.
Окно возвращает HTCLIENT. А может, например, вернуть HTCAPTION.
Это, кстати, часто используется в теме "как таскать окно за любое место". )
Вот мне и интересно каким образом hitTest определяет что курсор находится на кнопке (кнопка начинает подсвечиваться), сам алгоритм внутренний.
sevoan вне форума Ответить с цитированием
Старый 01.03.2012, 18:06   #7
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Координаты курсора известны
Размер и положение окна приводятся к экранным координатам.
Остается просто проверить PtInRect.
EUGY вне форума Ответить с цитированием
Старый 01.03.2012, 18:10   #8
sevoan
 
Регистрация: 07.01.2011
Сообщений: 8
По умолчанию

а если 20 кнопок на одном слое и в каждой разное положение, нужно вызывать PtInRect для каждой?
sevoan вне форума Ответить с цитированием
Старый 01.03.2012, 18:19   #9
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Каждое окно имеет важное свойство - class.
При создании любого окна (CreateWindowEx) указывается зарегистрированный класс.
При регистрации класса (RegisterClass) в нем указывается адрес оконной процедуры. То есть для двадцати кнопок класса "BUTTON" будет вызываться одна процедура обработки.
EUGY вне форума Ответить с цитированием
Старый 01.03.2012, 18:25   #10
sevoan
 
Регистрация: 07.01.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Каждое окно имеет важное свойство - class.
При создании любого окна (CreateWindowEx) указывается зарегистрированный класс.
При регистрации класса (RegisterClass) в нем указывается адрес оконной процедуры. То есть для двадцати кнопок класса "BUTTON" будет вызываться одна процедура обработки.
Это так. Но вопрос в другом - на форме 20 кнопок. При MouseMove нужно проверять находится ли курсор над одной из этих кнопок, для того чтобы, скажем изменить цвет конкретной кнопки. То есть сверять координаты курсора с каждым Rectangle?
sevoan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отслеживание изменения положения и размеров окна RAZOR1703 Win Api 9 03.12.2011 16:43
команда определения координат положения курсора мыши Aспирин Общие вопросы Delphi 11 28.03.2011 18:00
Проверка положения точки относительно треугольника AnDre_rus Общие вопросы C/C++ 2 12.11.2010 19:38
Убегание окна от курсора OffyGhost Помощь студентам 4 21.03.2010 00:20
задание положения курсора в окне(не full screen)) Oburec Общие вопросы Delphi 1 30.06.2009 00:42