Приветствую всех!
Кто-нибудь знает как быстро напихать ComboBox большим количеством строк. Например, 100 тысяч?
Известно, что при добавлении строки в ComboBox происходит SendMessage() с кодом события CB_ADDSTRING. При напихивании огромного количества это получается ооочень тормозно.
Здравствуйте Izix, Вы писали:
I>Приветствую всех! I>Кто-нибудь знает как быстро напихать ComboBox большим количеством строк. Например, 100 тысяч? I>Известно, что при добавлении строки в ComboBox происходит SendMessage() с кодом события CB_ADDSTRING. При напихивании огромного количества это получается ооочень тормозно.
I>Может есть альтернативы APIшному ComboBox?
Здравствуйте Izix, Вы писали:
I>Приветствую всех! I>Кто-нибудь знает как быстро напихать ComboBox большим количеством строк. Например, 100 тысяч? I>Известно, что при добавлении строки в ComboBox происходит SendMessage() с кодом события CB_ADDSTRING. При напихивании огромного количества это получается ооочень тормозно.
I>Может есть альтернативы APIшному ComboBox?
Здравствуйте Izix, Вы писали:
I>Кто-нибудь знает как быстро напихать ComboBox большим количеством строк. Например, 100 тысяч? I>Известно, что при добавлении строки в ComboBox происходит SendMessage() с кодом события CB_ADDSTRING. При напихивании огромного количества это получается ооочень тормозно.
1) Можно пихать в цикле, и том же цикле обрабатывать сообщения UI, то получается как бы в фоновом режиме.
2) Если в комбобокс нужно пихать 100 тыщ строк, то с дизайном что-то? Юхер как будет скроллить 100 тысяч строк? Ах, начало введет... Так и дать ему контрол, в котором строки пихаются только по первым треб буквам, например. Или несколько комбобоксов...
GS
Re[2]: Добавление большого кол-ва строк в ComboBox
Здравствуйте George Seryakov, Вы писали:
GS> 2) Если в комбобокс нужно пихать 100 тыщ строк, то с дизайном что-то? Юхер как будет скроллить 100 тысяч строк? Ах, начало введет... Так и дать ему контрол, в котором строки пихаются только по первым треб буквам, например. Или несколько комбобоксов...
Да, вот это действительно бы спасло, но ComboBox редактируемый. Туда юзеры могут вносить свои стринги, поэтому облом.
Re[2]: Добавление большого кол-ва строк в ComboBox
Здравствуйте DmitriySDA, Вы писали:
DSD>посмотри CB_INITSTORAGE
Попробовал CB_INITSTORAGE, но добавляет по времени столько же, сколько и без INIT, хотя в MSDN сказано, что это специально придумано для большого кол-ва Items. 8-(
Ужасная ситуация...
Попробовать owner_draw combobox?
Здравствуйте Izix, Вы писали:
I>Приветствую всех! I>Кто-нибудь знает как быстро напихать ComboBox большим количеством строк. Например, 100 тысяч? I>Известно, что при добавлении строки в ComboBox происходит SendMessage() с кодом события CB_ADDSTRING. При напихивании огромного количества это получается ооочень тормозно.
I>Может есть альтернативы APIшному ComboBox?
Здравствуйте Izix, Вы писали:
I>Здравствуйте DmitriySDA, Вы писали:
DSD>>посмотри CB_INITSTORAGE
I>Попробовал CB_INITSTORAGE, но добавляет по времени столько же, сколько и без INIT, хотя в MSDN сказано, что это специально придумано для большого кол-ва Items. 8-( I>Ужасная ситуация...
I>p.s. У меня Win2000.
А если сделать два комбобокса?
Допустим один алфавитный, а второй — отфильтрованный по первой букве ваш.
У меня похожая ситуация, правда, не настолько тяжелая (всего 1,5 тыс. записей), но выбирать уже очень не удобно.
Еще можно сделать простой edit. При вводе текста в нем появляться список, в котором содержаться только те строки, которые начинаются с текста введенного в edit'е.
Здравствуйте 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, Вы писали:
DSD>Еще можно сделать простой edit. При вводе текста в нем появляться список, в котором содержаться только те строки, которые начинаются с текста введенного в edit'е.