Как поймать message?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Как поймать message?

Сообщение 0xy » 15.07.2011 (Пт) 2:15

Позволяет ли VB-шная форма обрабатывать посланные ей сообщения?
Если да, то как?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Как поймать message?

Сообщение Viper » 15.07.2011 (Пт) 4:57

Конечно, как и любое окно. Читать про subclassing.
Весь мир матрица, а мы в нем потоки байтов!

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как поймать message?

Сообщение ger_kar » 15.07.2011 (Пт) 8:06

Прочитать можно здесь http://ru.wikipedia.org/wiki/Сабклассинг.
У меня вопрос, к тем кто хорошо в этом разбирается, сообщения и события чем они различаются и что между ними общего?
Бороться и искать, найти и перепрятать

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

Re: Как поймать message?

Сообщение Хакер » 15.07.2011 (Пт) 8:09

ger_kar писал(а):У меня вопрос, к тем кто хорошо в этом разбирается, сообщения и события чем они различаются и что между ними общего?

Всем. Ничего.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как поймать message?

Сообщение ger_kar » 15.07.2011 (Пт) 8:29

Я почемуто думал, что события это просто разновидность сообщений.
Бороться и искать, найти и перепрятать

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

Re: Как поймать message?

Сообщение Хакер » 15.07.2011 (Пт) 8:37

Сообщения — оконные. Причём тут события. Если у класса CDataBaseTable будет событие, значит CDataBaseTable — окно? :|
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как поймать message?

Сообщение ger_kar » 15.07.2011 (Пт) 8:59

Просто все контролы это по сути окна. Например, в отладчике можно установить точку останова реагирующую на оконные сообщения, ну к примеру на нажатие определенной кнопки, т.е. при нажатии происходит событие и посылается сообщение, которое перехватывется отладчиком.
Вот нашел:
Сообщения в Windows широко используются для уведомления о различных событиях. Если Вы хотите заставить какое-либо окно или контрол (элемент пользовательского интерфейса, на самом деле тоже являющийся окном, как то: кнопка, edit, Toolbar, Tree view и т.д.) совершить определённое действие, отправьте ему соответствующее сообщение. Сообщения также могут исходить от других приложений. Система уведомляет о таких событиях как передвижение мыши, нажатие клавиши на клавиатуре и т.д. также посредством сообщений.

Из этого я например понял, что событие порождает сообщение. Т.е. Нажали на кнопку мыши - произошло событие, и пошло сообщение контролу, над которым в данное время находился указатель.
Последний раз редактировалось ger_kar 15.07.2011 (Пт) 9:09, всего редактировалось 1 раз.
Бороться и искать, найти и перепрятать

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как поймать message?

Сообщение alibek » 15.07.2011 (Пт) 9:04

Наоборот.
Lasciate ogni speranza, voi ch'entrate.

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

Re: Как поймать message?

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

ger_kar писал(а):т.е. при нажатии происходит событие и посылается сообщение

Если речь о событиях вообще (например, хомячок умер — событие), то тогда вопрос связаны ли сообщения с событиями глуп.
Если речь о COM-событиях, то тогда ответ старый, а отцитированная фраза — чушь.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как поймать message?

Сообщение ger_kar » 15.07.2011 (Пт) 9:21

alibek писал(а):Наоборот.
Т.е. Контролу пришло сообщение и у него возникло событие?
Хакер писал(а):а отцитированная фраза — чушь.
Ну незнаю, на WASM е прочитал, вряд ли бы там стали чушь писать. Тем более, что этот прием в ольке можно сказать один из самых распространенных. Т.е. ставим бряк на сообщение, а по сути получаем реакцию на событие. Нажал кнопку (событие) - попал в отладчик. Разве нет связи?
Бороться и искать, найти и перепрятать

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

Re: Как поймать message?

Сообщение Хакер » 15.07.2011 (Пт) 9:32

ger_kar писал(а):Ну незнаю, на WASM е прочитал, вряд ли бы там стали чушь писать.

Я встречал там некоторое количество глупостей в статьях. Самой вызывающей была фраза, что __vbaNew из msvbvm60 — это функция, которую VB-приложения используют для показа диалоговых окон.

ger_kar писал(а):Т.е. ставим бряк на сообщение

Брекпоинт ставится не на сообщение, а на оконную процедуру.

ger_kar писал(а): по сути получаем реакцию на событие.

Ещё раз: если слово «событие» употреблялось всё это время в общем смысле, то оконные сообщения связаны с событиями. Точно так же, как связаны с событиями взрывы, автомобильные аварии, акты пробуждения человека, срабатывания будильника, и тому подобные вещи — это всё события. Глаз моргнул — событие, палец дрогнул — событие.

Ещё под словом «событие» могло иметься в виду «мышиное событие» или «клавиатурное событие», точно такое же, как я имел в виду здесь. Событие в этом контексте вообще никак не связано ни c VB, ни с ОС Windows; оно просто из области компьютерной науки.

Если же под «событиями» имелись в виду COM-события, то фраза «происходит COM-событие и посылается сообщение» — бредятина. И да, покажи мне на WASM-е фразу «происходит событие и посылается сообщение».

Если говорить об элементах управления вообще, то они просто получают оконное сообщение и этим удовлетворяются.

Если говорить об элементах управления, поверх которых накручена ActiveX/COM-обёртка, то они при получении некоторых оконных сообщениях внутри своей оконной процедуры делают RaiseEvent, чем инициируют COM-событие.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как поймать message?

Сообщение ger_kar » 15.07.2011 (Пт) 10:01

Хакер писал(а):Я встречал там некоторое количество глупостей в статьях. Самой вызывающей была фраза, что __vbaNew из msvbvm60 — это функция, которую VB-приложения используют для показа диалоговых окон.
Ну тут даже мне смешно :).
Хакер писал(а):Брекпоинт ставится не на сообщение, а на оконную процедуру.
Согласен, я просто употребил общеупотребительную фразу. Опять же процитирую:
Как мы уже рассмотрели ранее, в OllyDbg можно расставлять точки останова BPX на вызовах различных API-функций. Зачастую более эффективным способом "отловить" интересующие нас участки кода являются точки останова на сообщениях.
Здесь "интересующие нас участки кода" и есть процедура обрабатывающая сообщение. Я думаю, ты вполне понял, что я имел ввиду.
Хакер писал(а):Ещё раз: если слово «событие» употреблялось всё это время в общем смысле, то оконные сообщения связаны с событиями. Точно так же, как связаны с событиями взрывы, автомобильные аварии, акты пробуждения человека, срабатывания будильника, и тому подобные вещи — это всё события.Ещё под словом «событие» могло иметься в виду «мышиное событие» или «клавиатурное событие», точно такое же, как я имел в виду здесь. Событие в этом контексте вообще никак не связано ни c VB, ни с ОС Windows; оно просто из области компьютерной науки.
Да я особо их и не различал, просто первое к компьютерам отношения не имеет, а второе просто из области компьютерной науки, т.е. второе часный случай первого, так же как компьютры, и все что с ними связано, всего лишь аспект нашей большой и многогранной жизни.
Хакер писал(а):И да, покажи мне на WASM-е фразу «происходит событие и посылается сообщение».
Ну показать вряд-ли удасться, ибо это сугубо мои измышления, которые родил мой мозг на основании прочитанного (см. первую цитату с WASM 'a ) :oops: :D
Хакер писал(а):Если говорить об элементах управления, поверх которых накручена ActiveX/COM-обёртка, то они при получении некоторых оконных сообщениях внутри своей оконной процедуры делают RaiseEvent, чем инициируют COM-событие.
Ну тут хоть, что-то прояснилось :)
Бороться и искать, найти и перепрятать


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

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

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

    TopList