Мышь над элементом управления

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Мышь над элементом управления

Сообщение hclubmk » 08.12.2010 (Ср) 21:41

Есть пользовательский элемент управления (UserControl) - контейнер, который может содержать произвольный элемент управления (заранее неизвестно какой, но это между делом). Нужно определить, был ли клик мыши над пользовательским элементом управления (UserControl) (клик над внедренным - тождественен). Произвольный внедренный элемент может не иметь событий, связанных с мышью, получением фокуса, и .п. так что уповать на то, что внедренный элемент "поднимет" какое-либо событие, не приходится. Координаты и клик могу получить, переопределив оконную процедуру UserControl, но каким образом передать данные из модуля в UserControl без извращений?
Научились ли Вы радоваться трудностям?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Мышь над элементом управления

Сообщение Хакер » 08.12.2010 (Ср) 21:45

Нет события — значит эта особенность заложена при проектировании произвольного элемента. А если это заложено, значит не расчитано. А зачем делать то, что изначально не расчитано?

hclubmk писал(а): но каким образом передать данные из модуля в UserControl без извращений?

А это зависит от того, какие у тебя критерии для отнесения тех или иных вещей к извращениям. Я могу сказать путь, который по крайней мере правильный и не уродский.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Мышь над элементом управления

Сообщение hclubmk » 08.12.2010 (Ср) 21:47

Хакер писал(а):Я могу сказать путь
Будь добр.
Научились ли Вы радоваться трудностям?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Мышь над элементом управления

Сообщение Хакер » 08.12.2010 (Ср) 22:00

hclubmk писал(а):Будь добр.

  1. Использовать память, которая выделяется для каждого окна. Получать интерфейсный указатель, используя GetWindowLong с GWL_USERDATA (не требует доп. памяти окна) или положительным смещением (как раз используется смещение в доп. блоке памяти).
  2. Поместить PB в UC. В UC-шном WP транслировать сообщение в PB. В обработчике события MouseLalala PB транслировать событие в UC.
  3. Посмотреть, как родной WP получает интерфейсный указатель UC.
  4. Ввести в модуле коллекцию, куда экземпляры UC будут добавлять себя при создании и удалять при уничтожении. В качестве ключа использовать hWnd, можно тупо скастованный в строку. В обработчике брать элемент из коллекции.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Мышь над элементом управления

Сообщение hclubmk » 08.12.2010 (Ср) 23:01

Хакер писал(а):В обработчике события MouseLalala

UserControl_MouseLalala ?
Научились ли Вы радоваться трудностям?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Мышь над элементом управления

Сообщение Хакер » 08.12.2010 (Ср) 23:01

PictureBox_MouseLalala
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Мышь над элементом управления

Сообщение hclubmk » 08.12.2010 (Ср) 23:10

Не понимаю, ты шутишь, или это чистая монета? Какой PictureBox? При нахождении/действии мыши над внедренным объектом, в UserControl события мыши не поднимаются.
Научились ли Вы радоваться трудностям?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Мышь над элементом управления

Сообщение Хакер » 08.12.2010 (Ср) 23:20

В WP (который ты переопределил, перехватил) ты отлавливаешь WM_MOUSEXXX-собщения. Так? Ну так найди другое окно, которое принадлежит контролу, у которого есть мышиные события.

Я в качестве такого контрола предложил PB, но вообще говоря, это не самый хороший способ.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Мышь над элементом управления

Сообщение hclubmk » 08.12.2010 (Ср) 23:52

Хакер писал(а):Так?

Так

Изображение
В случае 1) всё хорошо.
В случае 2) (внедренный элемент управления всегда верхний, поверх возможных PB находящихся в UC ) я могу в переопределенной WP получить данные мыши, могу передать их в UC, но EC, который всегда выше остальных не поднимает никаких событий (частный случай).
Уточню вопрос: реально ли поднять событие мыши в UC из переопределенной WP, при совершении действий над EC? Если нет, какие возможны варианты?
Научились ли Вы радоваться трудностям?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Мышь над элементом управления

Сообщение Хакер » 09.12.2010 (Чт) 0:09

1) Чей WP ты подменяешь?
2) EC — windowed или windowless?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Мышь над элементом управления

Сообщение hclubmk » 09.12.2010 (Чт) 0:20

1) UC
2) Заранее неизвестно. Если windowless - проблем нет (UC отработает), если windowed - здесь проблема.
Научились ли Вы радоваться трудностям?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Мышь над элементом управления

Сообщение Хакер » 09.12.2010 (Чт) 0:25

1) С учётом п. 2 — в чём смысл сего?
2) Ну так перехвати EC-шный, если WP и из него дублируй сообщение окну-родителю, исправив координаты. Конечно, клики по детям EC таким образом не получишь, если рекурсивно не перехватишь их WP-шки.

Или можешь извратиться: накрыть окно EC своим прозрачным окном, пропускающим сквозь себя клики. Где-то на форуме прозрачные прокликивающиеся насквозь окна уже обсуждали.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Мышь над элементом управления

Сообщение hclubmk » 09.12.2010 (Чт) 2:21

Хакер писал(а):1) Чей WP ты подменяешь?
hclubmk писал(а):1) UC

в UC WP SetFocus(UChWnd) поднимает UC_GotFocus. Этого достаточно.
Спасибо за обсуждение.
Научились ли Вы радоваться трудностям?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Мышь над элементом управления

Сообщение Antonariy » 09.12.2010 (Чт) 13:28

А что будешь делать при получении фокуса через tab например?
Лучший способ понять что-то самому — объяснить это другому.

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Мышь над элементом управления

Сообщение hclubmk » 09.12.2010 (Чт) 23:51

Тоже интересный вопрос. С windowless EC проблем нет, а вот что делать с windowed - пока не знаю. Есть соображения?
Научились ли Вы радоваться трудностям?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Мышь над элементом управления

Сообщение Хакер » 10.12.2010 (Пт) 0:04

Чем нормальные предложенные методы не устраивают.

Просил правильных способов, а сам выбрал извратный.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Мышь над элементом управления

Сообщение hclubmk » 10.12.2010 (Пт) 9:11

Хакер писал(а):Ну так перехвати EC-шный

Было бы неплохо, но EC реализуется ч/з VBControlExtender.
Как получить его (EC) hWnd (если таковой имеется)?

добавлено позже
hWnd EC получаю ч/з GetWindow, перехватываю WP, но
Конечно, клики по детям EC таким образом не получишь , если рекурсивно не перехватишь их WP-шки.

дальнейший путь ясен.
Научились ли Вы радоваться трудностям?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

    TopList  
cron