Проверка Win32 Tree View Item Автоматически проверяет все дочерние элементы
Я использую Win32 API и MS Visual C++ 6 для построения древовидного представления структуры каталогов, с флажками, связанными с каждым элементом древовидного представления. Моя цель - иметь возможность проверить родительскую папку и автоматически проверить все связанные с ней дочерние элементы.
Однако после копания в MSDN я не смог найти контрольное уведомление для проверяемого элемента, только когда элемент выбран. Я рассмотрел вопрос об использовании уведомления о выборе, чтобы запросить у программы опрос элемента и узнать, является ли его текущее "состояние проверки" истинным, но я не уверен, что отмеченные и выбранные могут быть связаны таким образом, и я также обеспокоен об издержках, связанных с постоянным опросом элементов, когда пользователь перемещается по очень большому каталогу.
У кого-нибудь был опыт настройки этого сценария? Оправданы ли мои опасения по поводу затрат на опрос элемента GUI?
3 ответа
Там нет никаких уведомлений. Вы можете написать свой собственный, хотя. Просто обработайте щелчок мыши и используйте hittest, чтобы увидеть, находится ли курсор мыши на изображении состояния. Для полноты обработайте клавишу пробела и отправьте то же уведомление и для выбранного элемента.
Начиная с Windows Vista, Microsoft представила NM_TVSTATEIMAGECHANGING
и соответствующий NMTVSTATEIMAGECHANGING
состав. Я не уверен, почему это не задокументировано с помощью уведомлений в виде дерева, а вместо этого в разделе общего справочного контроля.
Этот код уведомления отправляется древовидным элементом управления, когда изображение состояния изменяется (т. Е. Когда флажок установлен).
NMTVSTATEIMAGECHANGING
структура имеет iOldStateImageIndex
а также iNewStateImageIndex
поле, которое указывает соответствующее изменение. Эта информация может использоваться для определения нового изображения состояния, которое будет отображаться (1 - флажок снят, а 2 - флажок)
В Vista также представлены затемненные, частичные и исключенные проверки, хотя в настоящий момент я не уверен, как они представлены индексом изображения состояния в двух базовых случаях выше.
Вот лучший способ MSDN (TreeView:: AfterCheck Event):
http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.aftercheck(v=vs.110).aspx