Вопрос № 51415: День добрый, коллеги. Вопрос следующий: Каким образом отслеживать перемещение курсора по строкам в CListBox'е (MFC)? Т.е. желательно, если пользователь в списке выделил какой-то Item, то где-то рядом отображается полная информация по нему. Если польз...
Вопрос № 51.415
День добрый, коллеги. Вопрос следующий: Каким образом отслеживать перемещение курсора по строкам в CListBox'е (MFC)? Т.е. желательно, если пользователь в списке выделил какой-то Item, то где-то рядом отображается полная информация по нему. Если пользователь перешёл ниже или выше, то информация автоматом обновляется.... Перебрал все сообщения, которые ClassWisard предлагает - ни фига... По инету тоже пока не докопался до истины...
Отправлен: 07.08.2006, 16:29
Вопрос задал: Nill (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Physicist
Здравствуйте, Nill!
Обрабатывать нужно ON_LBN_SELCHANGE. Получить выделенный элемент можно через GetCurSel(). Обработчик сообщения должен вернуть TRUE.
В MSDN есть даже пример (правда, на WinAPI: ms-help://<зависит от версии MSDN>/shellcc/platform/commctls/listboxes/usinglistboxes.htm), выполняющий то, что Вам нужно.
Ответ отправил: Physicist (статус: Студент)
Ответ отправлен: 07.08.2006, 16:55 Оценка за ответ: 3 Комментарий оценки: Спасибо, за ответ. Но MSDN я смотрел по данному вопросу. В том то и беда, что ON_LBN_SELCHANGE не ловится.... Не могу понять почему, но в обработчик данного сообщения управление не передаётся...
Отвечает: Zitz
Здравствуйте, Nill!
В редакторе формы диалога, второй кнопкой мыши по элементу ListBox -> Events...
Или на Классе диалога второй кнопкой мыши, в контекстном меню Add Windows Message Handler... Там ишем в окошке Class or object to handle идентификатор Вашего ListBox.
Ну или руками довавить в МессаджМап, см. приложение:
Где IDC_LIST1 - идентификатор Вашего ListBox
З.Ы. При смене итема лист бокс шлет нотифай окну родителю.
Приложение:
--------- Успех неизбежен + Думать вообще полезно + Чем сейчас, тем лучше
Ответ отправил: Zitz (статус: Студент)
Ответ отправлен: 07.08.2006, 17:09 Оценка за ответ: 3 Комментарий оценки: Спасибо за ответ. Это в принципе то же самое что и установка обработчика на ON_LBN_SELCHANGE через ClassWizard. Это я уже пробовал - висят у меня обработчики на всё что можно - не передаётся им управление... Фигня какая-то на пустом месте. Не могу понять из-за чего...
Отвечает: Melamed
Здравствуйте, Nill!
Попробуй написать потомок от CListBox. В нем обрабатывай обрабодчик системного сообщения WM_MOUSEMOVE
и используй метод CListBox::ItemFromPoint.
Если будут вопросы, задавай по внутренней почте.
Желаю удачи
Ответ отправил: Melamed (статус: 2-ой класс)
Ответ отправлен: 07.08.2006, 23:09 Оценка за ответ: 4 Комментарий оценки: Спасибо за совет. Потомок от CListBox я писал, но судя по всему сообщение до него не доходило. По поводу WM_MOUSEMOVE, то во-первых помимо мыши надо отслеживать еще и клаву, а во-вторых мне кажется это не очень нормально - отслеживать каждое движение мыши. Я скачал проект из Codeproject - там все работает как ни странно без WM_MOUSE. Сейчас разбираюсь
что за фигня была у меня. Еще раз спасибо за ответ. Удачи.