Здравствуйте, 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, уже вам виднее.