Авторазворачивание Tree control в разных системах
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 21.10.22 09:48
Оценка: 3 (1)
Есть графическая программа (точнее, плагин к программе), где отображается динамически конструируемый Tree control. Обнаружилось, что на Win7 этот контрол автоматически разворачивается на один уровень от корневого элемента, тогда как на Win10 такого не происходит, всё дерево полностью свёрнутое. Прогнав через Spy++, обнаружил, что, действительно, в Win7 после создания дерева и наполнения его элементами контролу прилетает сообщение TVM_EXPAND, тогда как в десятке его нет. (Разумеется, запускалась одна и та же версия с одним и тем же конфигом.)

К сожалению, плагин без открытых исходников, а в ассемблере я не настолько профи, чтобы докопаться до нужного места. То есть чисто теоретически есть вероятность, что в самом плагине проверяется версия операционки и по этому условию дерево либо разворачивается, либо нет. Но с точки зрения логики это было бы совершенно безумное, ничем не обоснованное решение. Поэтому больше верится, что различие в поведении каким-то образом связано именно с самой операционкой. Но до сих пор мне не приходилось слышать о таких эффектах в Windows 10. Может, кто-нибудь в курсе подобных казусов? Чем они могут быть вызваны и есть ли возможность повлиять на это поведение без модификации кода? (Конечно, для десятки можно накостылить сторонний хук с автоматической посылкой сообщения разворачивания после инициализации дерева, но мне интересно в первую очередь разобраться в причинах такого поведения.)

Если хочется подробностей, то речь идёт о плагине FileInfo к файл-менеджеру Total Commander; при просмотре PE-файлов вкладка Dll Dependencies выводит дерево зависимостей до заданной в настройках глубины (по умолчанию 2). Плагин, судя по всему, написан в Visual C++ 2008 (linker version 9.00). Сам Total Commander написан на Delphi/Lazarus (32- и 64-битная версия, соответственно); разница в поведении проявляется в обеих битностях.
Примеры скриншотов, как окно выглядит сразу после открытия: Win7, Win10.
Почему же, ё-моё, ты нигде не пишешь «ё»?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.