| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > List Control |
| Автор: Aline 5.8.2009, 10:48 | ||
| Всем привет! Есть List Control в виде таблицы (Report). В нём 4 колонки. В первой колонке необходимо реализовать отработку клика левой кнопкой мыши, как это сделать? Т.е. на ней надо кликнуть мышкой и в ней должен поменяться текст. Вернее я не могу понять какой Event выбрать, добавила все где Click или Change, но в отладчике на тчку останова внутри процедур не попадаю. Студия 7-я от 2002г. Нашла вот такой пример:
но я не могу найти в свойствах, вернее в Event событие OnFltItemChanged . Как сделать? |
| Автор: Earnest 5.8.2009, 12:05 |
| Лови уведомление NM_CLICK: ON_NOTIFY (IDC_LIST, NM_CLICK, OnClick). В качестве pNMHDR приходит информация о кликнутом итеме (см. MSDN), но можно и просто HitTest вызвать. |
| Автор: Aline 6.8.2009, 07:13 |
| Earnest, спасибо, сейчас попробую |
| Автор: Aline 6.8.2009, 07:50 |
| Пробую - не получается ON_NOTIFY (IDC_LIST, NM_CLICK, OnClick)." У List Control я не нахожу OnClik, при добавлении Event на NM_Click формируется процедура: OnNMClickList(NMHDR *pNMHDR, LRESULT *pResult) но на точке останова там опять не останавливается |
| Автор: Aline 6.8.2009, 10:38 | ||
Сделала вот так:
Теперь на точку останова попадает, всё замечательно меняется, но только в первой строке |
| Автор: Aline 6.8.2009, 13:36 | ||
вот вариант, который наконец то заработал как надо, может кому пригодится:
|
| Автор: Earnest 7.8.2009, 07:34 |
| Aline, не надо увлекаться визардами. Все уведомления добавляются одинаково, ровно как я написала: метод void OnTramPamPam(NMHDR* pNMHDR,LRESULT* pResult) + в карту сообщений ON_NOTIFY (IDC_LIST, NM_TRAMPAMPAM, OnTramPamPam). Имена функции, естественно, произвольные, главное - сигнатуру соблюдать. Так как ты сделала, тоже можно, но несколько громоздко. Подумай, что будет с кодом, если нужно обрабатывать несколько уведомлений. |
| Автор: Aline 7.8.2009, 07:40 |
| Earnest, я визардами не увлекалась. Я не знаю, что это было, но в 2005 студии я спокойно добавила обработчик для NM_CLICK и он ловил клик мыши на ListControl, а вот в 2002 студии это почему то не работало. Пришлось идти этим путем. Вы мне можете объяснить почему работает в одном месте и не работает в другом? Хотя действия одни и те же.... |
| Автор: Earnest 7.8.2009, 07:48 |
| Значет, не одни. Ты код сравнивала? Вот если код один и тот же, тогда вопрос. Впрочем, 2002 студию я пропустила (по слухам, она весьма глючная), а на 2003 все нормально. |
| Автор: Aline 7.8.2009, 08:08 |
| Сравнивала я всё. 2003-й нету, а проект был сделан в 2002, поэтому и дорабатывать надо было в ней. И не я одна не могла понять почему не работает. Так что это вопрос. |
| Автор: Earnest 7.8.2009, 13:56 |
| Зачем работать в глючной студии, когда есть более стабильные варианты. Из мазохизма, что ли. Но если очень хочется, то можно и разобраться. Скажем, код сгенерирован (написан) один и тот же и он правильный. Но в 2002 в обработчик не приходит управление. Так? Тогда ищем в MFC метод OnNotify или пишем свой (просто вызывая стандартный - так проще для отладки) и ковыряемся там - чего это уведомление не диспетчеризируется? Может, в MFC 2002 глюки? Ну и т.д. Хотя я бы просто взяла нормальную среду. |
| Автор: Aline 7.8.2009, 13:59 |
| Earnest, послушайте, я не хочу рабираться, без обид. Это был разовый проект, при том не мой. По каким то соображениям он был сделан именно в этой студии. Проблема была решена. Вопрос помечен как решенный. Давайте закроем эту тему? Если решите, что она здесь не нужна, как модератор можете её удалить, я не обижусь. |
| Автор: Earnest 7.8.2009, 14:09 |
| Да нет проблем, ты спрашиваешь - я отвечаю. Ты написала "Так что это вопрос". Я поняла так, что нужно разбираться. Нет, и слава богу. |