Здравствуйте, Alexey Shirshov, Вы писали:
AS>Здравствуйте, Heyyou, Вы писали:
AS>NM_CLICK не работает?
работает, но нужно узнать, когда ткнули не по элементу tree-view вообще, а именно по checkbox'у, а также по какому конкретно checkbox'у, и как изменилось его состояние, то есть поставили галку или убрали.
Re[3]: Как отловить клики по checkbox'ам в элементе tree-vie
Не совсем то, что надо. Во-первых, обновление состояния checkbox'а происходит НЕ ДО, а ПОСЛЕ уведомления NM_CLICK, то есть в обработчике NM_CLICK я получу текущее состояние checkbox'a, которое сменится (если сменится, почему "если" смотри далее), как только обработчик завершит свои действия. Во-вторых, данным способом нельзя узнать произошел ли клик именно по checkbox'у или же просто по строке, на которой находится checkbox (отсюда то самое "если сменится"), то есть по тексту справа от checkbox'а. А вариант сохранить предыдущее состояние checkbox'а, а потом сравнить с новым состояниеm (то есть, если значение не изменилось, то клик был по строке, если изменилось, то именно по checkbox'у) не подходит как раз потому, что обновление состояния происходит ПОСЛЕ NM_CLICK, а НЕ ДО. Сохранять же текущее состояние, чтобы впоследствии сравнить его с новым не имеет смысла, так как внутри обработчика NM_CLICK я еще не могу знать, произойдет ли изменение состояния (смотри ранее: был ли клик по строке или именно самому checkbox'у).
Ну конечно понятно, что можно сделать так:
из обработчика NM_CLICK добавляем в очередь уведомление:
а в обработчике MY_NM_MESSAGE получаем состояние checkbox'a и сравниваем с oldCheckState, только что я сделал это несколько по-другому нежели используя ТreeView_GetSelection и TreeView_GetCheckState.
А есть ли более простое решение?
Re[5]: Как отловить клики по checkbox'ам в элементе tree-vie
..
Скорее всего тебе поможет TreeView_HitTest и TVHT_ONITEMSTATEICON. Сам не делал, но есть код для листвью (ListView) для тех же целей — идея там понятна (OWL).
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Здравствуйте, Heyyou, Вы писали:
AS>[]
H>>А есть ли более простое решение?
AS>Попробуй так. Обработчик NM_CLICK AS>
Неа, не работает, GetState возвращает одно и то же значение. Причем GetSelection, который вроде как надо вызвать до клика тоже не без проблем, она возвращает выделенный элемент, а не тот, по checkbox'у которого кликнули. Дело в том, что при клике по checkbox'у выделение не меняется. Точнее оно меняется, но на доли секунды, то есть заметить можно, но потом возвращается на тот элемент, который был выделен до клика по checkbox'у. В NM_CLICK это изменение не ловится.
Re[6]: Как отловить клики по checkbox'ам в элементе tree-vie
Здравствуйте, VVV, Вы писали:
VVV>Здравствуйте, Heyyou, Вы писали:
VVV>.. VVV>Скорее всего тебе поможет TreeView_HitTest и TVHT_ONITEMSTATEICON. Сам не делал, но есть код для листвью (ListView) для тех же целей — идея там понятна (OWL).