![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 07.01.2011
Сообщений: 8
|
![]()
Такой вопрос - каким алгоритмом система проверяет что точка (курсор) находится на одном из четырехугольнике (кнопке) окна.
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 01.11.2011
Сообщений: 172
|
![]()
Попробуй воспользоваться утилитой Spy++(VS2008, 2010), и посмотри какие сообщения приходят при наведении курсора на кнопку.
Эти сообщения приходят в системную очередь сообщений,а оттуда в очередь для сообщений окна, где выгребаются функцией. По-моему так.
Желание тысяча возможностей, нежелание - тысяча причин
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 07.01.2011
Сообщений: 8
|
![]()
Спасибо, попробую, но кто уже сталкивался с таким вопросом - отпишитесь!
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 01.11.2011
Сообщений: 172
|
![]()
Есть хорошая книга Щупак WinApi, советую
Желание тысяча возможностей, нежелание - тысяча причин
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
![]()
В оконную процедуру посылается WM_NCHITTEST.
Окно возвращает HTCLIENT. А может, например, вернуть HTCAPTION. Это, кстати, часто используется в теме "как таскать окно за любое место". ) |
![]() |
![]() |
![]() |
#6 |
Регистрация: 07.01.2011
Сообщений: 8
|
![]()
Вот мне и интересно каким образом hitTest определяет что курсор находится на кнопке (кнопка начинает подсвечиваться), сам алгоритм внутренний.
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
![]()
Координаты курсора известны
Размер и положение окна приводятся к экранным координатам. Остается просто проверить PtInRect. |
![]() |
![]() |
![]() |
#8 |
Регистрация: 07.01.2011
Сообщений: 8
|
![]()
а если 20 кнопок на одном слое и в каждой разное положение, нужно вызывать PtInRect для каждой?
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
![]()
Каждое окно имеет важное свойство - class.
При создании любого окна (CreateWindowEx) указывается зарегистрированный класс. При регистрации класса (RegisterClass) в нем указывается адрес оконной процедуры. То есть для двадцати кнопок класса "BUTTON" будет вызываться одна процедура обработки. |
![]() |
![]() |
![]() |
#10 | |
Регистрация: 07.01.2011
Сообщений: 8
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Отслеживание изменения положения и размеров окна | 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 |