| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Работа с сообщениями |
| Автор: Coocky 19.10.2004, 21:55 |
| Стыдно признаться-совсем не умею работать с сообщениями.Это AppWizard виноват. Вот писал прогу.У меня в 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 | ||||
Да я без нее ни куда
В чем различия? А как можно отправить сообщение LVN_BEGINDRAG,из своей функции? |