Добавление большого кол-ва строк в ComboBox
От: Izix  
Дата: 23.10.02 14:18
Оценка:
Приветствую всех!
Кто-нибудь знает как быстро напихать ComboBox большим количеством строк. Например, 100 тысяч?
Известно, что при добавлении строки в ComboBox происходит SendMessage() с кодом события CB_ADDSTRING. При напихивании огромного количества это получается ооочень тормозно.

Может есть альтернативы APIшному ComboBox?
Re: Добавление большого кол-ва строк в ComboBox
От: DmitriySDA Украина  
Дата: 23.10.02 14:26
Оценка: 3 (1)
Здравствуйте Izix, Вы писали:

I>Приветствую всех!

I>Кто-нибудь знает как быстро напихать ComboBox большим количеством строк. Например, 100 тысяч?
I>Известно, что при добавлении строки в ComboBox происходит SendMessage() с кодом события CB_ADDSTRING. При напихивании огромного количества это получается ооочень тормозно.

I>Может есть альтернативы APIшному ComboBox?


посмотри

CB_INITSTORAGE
Re: Добавление большого кол-ва строк в ComboBox
От: whiteForest  
Дата: 23.10.02 14:48
Оценка:
Здравствуйте Izix, Вы писали:

I>Приветствую всех!

I>Кто-нибудь знает как быстро напихать ComboBox большим количеством строк. Например, 100 тысяч?
I>Известно, что при добавлении строки в ComboBox происходит SendMessage() с кодом события CB_ADDSTRING. При напихивании огромного количества это получается ооочень тормозно.

I>Может есть альтернативы APIшному ComboBox?


А как тебе такое решение...

ComboBox::SetRedraw(FALSE);

добавить 100000 строк

ComboBox::SetRedraw(TRUE);
Re: Добавление большого кол-ва строк в ComboBox
От: George Seryakov Россия  
Дата: 23.10.02 15:26
Оценка:
Здравствуйте Izix, Вы писали:

I>Кто-нибудь знает как быстро напихать ComboBox большим количеством строк. Например, 100 тысяч?

I>Известно, что при добавлении строки в ComboBox происходит SendMessage() с кодом события CB_ADDSTRING. При напихивании огромного количества это получается ооочень тормозно.

1) Можно пихать в цикле, и том же цикле обрабатывать сообщения UI, то получается как бы в фоновом режиме.
2) Если в комбобокс нужно пихать 100 тыщ строк, то с дизайном что-то? Юхер как будет скроллить 100 тысяч строк? Ах, начало введет... Так и дать ему контрол, в котором строки пихаются только по первым треб буквам, например. Или несколько комбобоксов...
GS
Re[2]: Добавление большого кол-ва строк в ComboBox
От: Izix  
Дата: 23.10.02 15:53
Оценка:
Здравствуйте George Seryakov, Вы писали:

GS> 2) Если в комбобокс нужно пихать 100 тыщ строк, то с дизайном что-то? Юхер как будет скроллить 100 тысяч строк? Ах, начало введет... Так и дать ему контрол, в котором строки пихаются только по первым треб буквам, например. Или несколько комбобоксов...



Да, вот это действительно бы спасло, но ComboBox редактируемый. Туда юзеры могут вносить свои стринги, поэтому облом.
Re[2]: Добавление большого кол-ва строк в ComboBox
От: Izix  
Дата: 23.10.02 16:21
Оценка:
Здравствуйте DmitriySDA, Вы писали:

DSD>посмотри CB_INITSTORAGE


Попробовал CB_INITSTORAGE, но добавляет по времени столько же, сколько и без INIT, хотя в MSDN сказано, что это специально придумано для большого кол-ва Items. 8-(
Ужасная ситуация...

p.s. У меня Win2000.
Re: Добавление большого кол-ва строк в ComboBox
От: Andrew S Россия http://alchemy-lab.com
Дата: 23.10.02 16:29
Оценка:
Попробовать owner_draw combobox?
Здравствуйте Izix, Вы писали:

I>Приветствую всех!

I>Кто-нибудь знает как быстро напихать ComboBox большим количеством строк. Например, 100 тысяч?
I>Известно, что при добавлении строки в ComboBox происходит SendMessage() с кодом события CB_ADDSTRING. При напихивании огромного количества это получается ооочень тормозно.

I>Может есть альтернативы APIшному ComboBox?
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[3]: Добавление большого кол-ва строк в ComboBox
От: DmitriySDA Украина  
Дата: 24.10.02 07:53
Оценка:
Здравствуйте Izix, Вы писали:

I>Здравствуйте DmitriySDA, Вы писали:


DSD>>посмотри CB_INITSTORAGE


I>Попробовал CB_INITSTORAGE, но добавляет по времени столько же, сколько и без INIT, хотя в MSDN сказано, что это специально придумано для большого кол-ва Items. 8-(

I>Ужасная ситуация...

I>p.s. У меня Win2000.


А если сделать два комбобокса?
Допустим один алфавитный, а второй — отфильтрованный по первой букве ваш.

У меня похожая ситуация, правда, не настолько тяжелая (всего 1,5 тыс. записей), но выбирать уже очень не удобно.

Еще можно сделать простой edit. При вводе текста в нем появляться список, в котором содержаться только те строки, которые начинаются с текста введенного в edit'е.
Re: Добавление большого кол-ва строк в ComboBox
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 24.10.02 08:10
Оценка: 3 (1)
Здравствуйте Izix, Вы писали:

I>Приветствую всех!

I>Кто-нибудь знает как быстро напихать ComboBox большим количеством строк. Например, 100 тысяч?
I>Известно, что при добавлении строки в ComboBox происходит SendMessage() с кодом события CB_ADDSTRING. При напихивании огромного количества это получается ооочень тормозно.

I>Может есть альтернативы APIшному ComboBox?


Значит так — возникла следующая идея:

Раз у комбика есть такой параметр, как высота выпадающего списка, то нафиг держать в самом списке 100 штук записей? Итак, идем по следующему пути:

1. Юзаем STL map (или чего еще по вкусу).

2. Обрабатываем нотификацию CBN_DROPDOWN

3. По этой нотификации заполняем видимые на экране строки значениями из map.

4. Все.

Это, так сказать, голая идея...
Re[4]: Добавление большого кол-ва строк в ComboBox
От: DmitriySDA Украина  
Дата: 24.10.02 08:15
Оценка:
Здравствуйте DmitriySDA, Вы писали:

DSD>Еще можно сделать простой edit. При вводе текста в нем появляться список, в котором содержаться только те строки, которые начинаются с текста введенного в edit'е.


Flamer
http://rsdn.ru/forum/Message.aspx?mid=119520&only=1
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.