Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Работа с сообщениями


Автор: Coocky 19.10.2004, 21:55
Стыдно признаться-совсем не умею работать с сообщениями.Это AppWizard виноват. :rtfm Всегда пользовался его услугами.Но создавая все более серьезные проги ,понимаю-с ним далеко не уйдешь.
Вот писал прогу.У меня в SDI приложении есть форма на котороую я кинул ListCtrl.Мне надо обрабатывать сообщение о вертикальной прокрутке.Но в стардатном наборе Визарде его нет.Понимаю,что надо было создавать свой класс,производный от листа.Там почти все сообщения,которые для окон есть.Но переписывать не могу,очень большой код.
Вот интересно можно было б как-то внести обработчик сообщения прокрутки ручками в карту сообщения.
Не понимаю разницу (не знаю) между ON_NOTIFY,WM_NOTIFY,WM_NOTIFY_REFLECT,WM_COMMAND,ON_COMMAND и т.д.
Как можно в своей фунции послать сообщение,указав правильный wParam и lParam;или перехватить там сообщение и обработать по-своему.
Стал похож на собаку Павлова.Помогите,кому не лень.Или ссылку дайте хорошую.В МСДН пробовал залесть,голова кругом -инфа раскинута по всему хелпу.Устал.
А я тоже чем-то пригожусь. :)

Автор: Gorbatovsky 20.10.2004, 11:57
Общие элементы управления Win32 отправляют большинство уведомлений в виде сообщений WM_NOTIFY. Стандартные элементы управления Windows, используемые также в 16-разрадной Windows, отправляют большинство уведомлений в виде сообщений WM_COMMAND.

Например в карту сообщений я добавил еще один обработчик ON_NOTIFY_EX
BEGIN_MESSAGE_MAP(C2DPointBox, CDialog)
//{{AFX_MSG_MAP(C2DPointBox)
..
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnNeedToolTipText)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


В следующем примере я обрабатываю сообщение ON_NOTIFY_REFLECT
BEGIN_MESSAGE_MAP(CDragListCtrl, CListCtrl)
//{{AFX_MSG_MAP(CDragListCtrl)
ON_NOTIFY_REFLECT(LVN_BEGINDRAG, OnBegindrag)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


Посмотреть на сообщения отправляемые в программе можно утилитой Spy++
Запускаю свою программу потом Spy++.
Нахожу в нем интересующее меня окно. Например ListBox.
При помощи контекстного меню открываю окно с сообщениями для ListBox.
Дальше двигаю слайдеры и вижу, в окне сообщения.
Там их очень много. Можно установить фильтр.
Например нас интересуют
WM_VSCROLL
WM_MOUSEMOVE.

Теперь нам нужно в классе ListBox обработать эти сообщения.
Эти можно добавить при помощи Визарда





Автор: Coocky 20.10.2004, 20:49
Цитата
Посмотреть на сообщения отправляемые в программе можно утилитой Spy++

Да я без нее ни куда :)
Цитата
ON_NOTIFY_EX,ON_NOTIFY_REFLECT

В чем различия?
А как можно отправить сообщение LVN_BEGINDRAG,из своей функции?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)