Здравствуйте, Alexey Shirshov, Вы писали:
AS>Здравствуйте, Heyyou, Вы писали:
AS>[]
AS>Обработчик NM_CLINK
AS>AS>TreeView_GetSelection
AS>TreeView_GetCheckState
AS>
Не совсем то, что надо. Во-первых, обновление состояния checkbox'а происходит НЕ ДО, а ПОСЛЕ уведомления NM_CLICK, то есть в обработчике NM_CLICK я получу текущее состояние checkbox'a, которое сменится (если сменится, почему "если" смотри далее), как только обработчик завершит свои действия. Во-вторых, данным способом нельзя узнать произошел ли клик именно по checkbox'у или же просто по строке, на которой находится checkbox (отсюда то самое "если сменится"), то есть по тексту справа от checkbox'а. А вариант сохранить предыдущее состояние checkbox'а, а потом сравнить с новым состояниеm (то есть, если значение не изменилось, то клик был по строке, если изменилось, то именно по checkbox'у) не подходит как раз потому, что обновление состояния происходит ПОСЛЕ NM_CLICK, а НЕ ДО. Сохранять же текущее состояние, чтобы впоследствии сравнить его с новым не имеет смысла, так как внутри обработчика NM_CLICK я еще не могу знать, произойдет ли изменение состояния (смотри ранее: был ли клик по строке или именно самому checkbox'у).
Ну конечно понятно, что можно сделать так:
из обработчика NM_CLICK добавляем в очередь уведомление:
PostMessage(HWND,MY_NM_MESSAGE,WPARAM,(LPARAM)oldCheckState);
а в обработчике MY_NM_MESSAGE получаем состояние checkbox'a и сравниваем с oldCheckState, только что я сделал это несколько по-другому нежели используя ТreeView_GetSelection и TreeView_GetCheckState.
А есть ли более простое решение?