MFC CListrCtrl: массовое обновление данных виртуального списка - PullRequest
0 голосов
/ 02 января 2012

Есть ли способ, изначально поддерживаемый CListCtrl, или с помощью некоторой техники кодирования, чтобы обновлять порцию данных в CListCtrl в режиме виртуального списка вместо одного за раз?

По умолчаниюкогда список требует данные для ячейки, мы обрабатываем их через LVS_GETDISPINFO.Если я скажу 8x8 (64) ячеек, видимых и постоянно обновляемых, то это в основном вызывает обработчик LVS_GETDISPINFO 64 раза.Это нормальное и ожидаемое поведение, но я считаю, что при повторном вызове этой функции возникают небольшие издержки, а не просто выполнение цикла for для всех 64 ячеек.И это проблема для меня, потому что мой контроль постоянно обновляет все 64 ячейки (представьте что-то вроде трассировки TCP-пакетов).

CListCtrl, конечно, поддерживает кэширование (хотя в моей ситуации это бесполезно), но я снова чувствую себя тамнакладные расходы при вызове обработчика LVS_GETDISPINFO снова и снова.Простым примером будет, скажем, определить, является ли мой указатель на базу данных действительным (не нулевым) до получения данных ... по сути, эта строка кода вызывается 64 раза, когда я мог бы сделать это только 1 раз, затемуказатель цикла for для получения данных моих 64 ячеек.Кроме того, указатель - простой пример, я больше не буду объяснять больше того, что я делаю (чего нельзя избежать), так как для этого требуется код.

Поскольку время имеет существенное значение, я могу 'Вернемся к переписыванию моего собственного списка Ctrl, который более эффективен, поскольку требуется время, чтобы дублировать другие преимущества CListCtrl, которыми я наслаждаюсь, наследуя его напрямую.Единственная проблема сейчас - это скорость.Если есть способ, скажем что-то вроде обработчика, который передает массив ячеек с нулевым символом в конце для обновления, чтобы мы могли массово обновить его в одной функции, что было бы здорово.

Или, возможно, можно узнать, какие ячейки ожидают обновления в LVS_GETDISPINFO, чтобы, если возможно, я обновил все ячейки и проверил все обновление, чтобы прекратить получать LVS_GETDISPINFO?

Любойидеи?Заранее спасибо.

...