Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Виртуальные списки 
V
    Опции темы
Homer
Дата 12.11.2006, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 29.12.2004

Репутация: нет
Всего: нет



   Мне необходимо отображать очень большой список из 100000 элементов приблизительно. Слышал что-то про виртуалтные списки, которые для этого вроде и предназначены, покопался в MSDN, но ничего путевого там не нашел. 
   Подскажите пжл, где можно найти инфу по данной теме, а если там все достаточно просто, то напишите тут.
   Заранее благодарен.
PM MAIL   Вверх
vinter
Дата 12.11.2006, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 4
Всего: 56



а чем обычный не устраивает??
у меня было окол 50 млн. значений, использовал обычный список..


--------------------
Мой блог
PM MAIL WWW   Вверх
Dray
Дата 13.11.2006, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Материалист
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 7.10.2003
Где: г. Всеволожск

Репутация: 2
Всего: 6



Проблема может возникнуть если сразу начать заполнять список всеми 100000 элементами. Очень долго ждать придется. В этом случае следует постепенно подгружать элементы, когда пользователь прокручивает список.


--------------------
忍者

user posted image
PM MAIL   Вверх
AlexPro
Дата 13.11.2006, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 9.11.2005
Где: Санкт-Петербург

Репутация: 3
Всего: 4



Мне нужен был список, расчитанный на пару-тройку десятков тысяч записей. Думал, обойдется. Проблемы с производительностью начались уже на сотнях записей. После переделки под виртуальный список - летает на тысячах.
Собственно, о работе со списком можно посмотреть раздел List-View Controls
Если же своими словами, суть заключается в следующем: для списка при его создании определяется стиль LVS_OWNERDATA
Затем нужно указать количество отображаемых элементов (функция SetItemCountEx).
После этого остается только перехватывать сообщение LVN_GETDISPINFO, посылаемое для каждой ячейки списка, и подсовывать списку нужную для отображения информацию (например, из массива).

Код

// Заполнение ячеек списка информацией
void CListMyView::OnLvnGetdispinfo(NMHDR *pNMHDR, LRESULT *pResult)
{
  NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
  LV_ITEM* pItem= &(pDispInfo)->item;
  int nIndex= pItem->iItem;    // индекс в массиве для отображения списка
  CMyData* ptd=(CMyData*)m_aList[nIndex];
  if (pItem->mask & LVIF_TEXT) // требуется текст?
  {
    switch (pItem->iSubItem) // номер столбца
    {
    case 0:    // если название
      pItem->pszText=ptd->GetTitle();
      break;
    .............................
    }
  }
}

Получается гибкая и шустрая система, однако, придется распрощаться с автоматической сортировкой.
PM MAIL   Вверх
Homer
Дата 13.11.2006, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 29.12.2004

Репутация: нет
Всего: нет



  Спасибо, AlexPro, то что надо, все заработало, а, проблема действительно была при загрузке - список грузился неприлично долго. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1106 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.