Re: Чтение данных из SysListView32 со стилем LVS_OWNERDATA
От: visual_wind  
Дата: 20.12.13 08:00
Оценка: 1 (1)
Здравствуйте, Kirhog, Вы писали:

K>Здравствуйте,


K>Столкнулся с проблемой, с которой не получилось разобраться: необходимо реализовать периодическое получение содержимого ячеек с компонента SysListView32, у которого выставлен стиль LVS_OWNERDATA.


Я думаю, что вы наверняка читали в MSDN эту статью. Для SysListView32 в сочетании с LVS_OWNERDATA список является виртуальным. Это означает, что сам SysListView32 несет ответственность только за отрисовку элементов, а ответственность за обработку содержимого несет владелец SysListView32. Это оправдано для списков большого размера, и на пользователя возлагается ответственность по повышению скорости их работы, например, с помощью кэширования.

Естественно LVM_GETITEMTEXT не работает, ибо SysListView32 отрисовал и забыл. Напротив — именно SysListView32 посылает LVN_GETDISPINFO своему владельцу и именно владелец SysListView32 должен обрабатывать у себя LVN_GETDISPINFO и снабжать SysListView32 информацией для отображения, если SysListView32 требуется свои айтемы перерисовать. Я не использовал SysListView32 из WinAPI, а из MFC, и, к сожалению, это было много лет назад. Помнится, тогда для стиля LVS_OWNERDATA я наследовался от CListView, добавлял помимо всего прочего в члены класса-потомка список отображаемых элеметов и функции для загрузки из файла — выгрузки в файл, а также обработчик LVN_GETDISPINFO, который пересылался в мой класс-потомок из родительского диалога. В итоге эти функции загрузки — выгрузки вызывались исходя из логики работы программы, а не действий пользователя, и если в результате загрузки содержимое менялось, я перерисовывал CListView. Если пользователь прокручивал список, я в обработчике LVN_GETDISPINFO снабжал CListView айтемами для отображения. Больше, увы, уже не припомню. Как вы сделаете под WinApi, уже вам виднее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.