![]() |
|
|
![]()
|
|
| heavix |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 10.8.2007 Репутация: нет Всего: нет |
Доброго времени суток)
Уважаемые обитатели форума, может подскажите как разрулить ситуацию - никак не могу сообразить: Есть TreeView контрол с чекбоксами (исспользую WTL). Обрабатываю следующие сообщения: TVN_SELCHANGEDW и NM_CLICK. Собственно проблема заключается в следующем: Когда кликаешь на элементе дерева (не на чекбоксе) - приходит нотификация TVN_SELCHANGEDW и элемент становится выделенным. Однако если после кликнуть на чекбоксе другого элемента - в момент когда еще держишь левую кнопку мыши - весь элемент становится подсвечен как выделен! при отпускании кнопки мыши приходит нотификация NM_CLICK и я меняю состояние чекбокса. При этом выделенным (соответственно и подсвеченым) становится обратно тот элемент который был выделен ранее. Для меня - это баг. И хотелось бы избавиться от этой "мигалки" - то есть сделать так что бы при клике на чекбоксе не происходило подсвечивание этого элемента, а подсвеченным оставался тот элемент который ранее был выделен (или никакой - если никакой элемент ранее не был выделен). Ума не приложу каким образом происходит подсвечивание элемента при MOUSE_LDOWN на чекбоксе - ведь в коде нигде это не обрабатывается явно - может это дефолтное поведение дерева??? И когда происходит подсвечивание данный элемент не становится выделенным так как уведомление TVN_SELCHANGEDW - не приходит. Возможно есть какой то нюанс. Если кто вкурсе - подскажите пожалуйста как с этим справится. Всем за ранее очень благодарен! |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Если я правильно поняла, ты хочешь, чтобы на клике по чекбоксу фокус на элемент не ставился, а ставился только по клику на "тело".
Попробуй обрабатывать не MN_CLICK/TVN_SELCHANGED, а WM_LBUTTONDOWN. В этом обработчике проверяй, куда попал клик. И если на чекбокс - то меняй состояние, но не вызывай Default, а если на строку - тогда вызывай. Написала Default как в MFC, как это сделать в WTL - не знаю, но суть в том, чтобы передать управление дефолтной оконной процедуре дерева. Если это не сделать, то нажатие левой клавиши не приведет к изменению выделения. -------------------- ... |
|||
|
||||
| heavix |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 10.8.2007 Репутация: нет Всего: нет |
Большое спасибо - разобрался)))
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |