| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > ССomboBox |
| Автор: Dreamer_0x01 14.9.2005, 09:33 |
| Имеется ССomboBox. при добавлеии в него элементов "по-простому" типа AddString()строки нумеруются в порядке добавления. (сортировка естественно отключна). И по GetCurSel и SetCurSel мы определяем/задаем номер текущей выбранной/выбираемой строки. Можно ли создать "Дырявый" комбобокс, чтобы номера строк в нем были к примеру {0,2,3,5,6,8} ? И по GetCurSel чтобы возвращались эти числа? |
| Автор: Coocky 14.9.2005, 10:15 | ||
Дружище, ты начинаешь меня пугать Да, забыл ответить: но вопросом на вопрос- можно ли сделать "дырявый" массив? |
| Автор: Dreamer_0x01 14.9.2005, 10:33 | ||||
| Объясняю. В зависимости от разных ситуаций в программе мне надо сделать недоступным выбор некоторых пунктов. Задизейблить строку нельзя. Поэтому приходится каждый раз удалять/добавлять строки, причем чтобы нумерация была в нужном мне порядке, приходится сначала все удалить, а потом нужное мне снова добавить. То есть у меня имеется массив данных МОЯ_СТРУКТУРА М[N]; В зависимости от ситуации мне ладо отображать в комбобоксе только определенные элементы в этой структуре, то есть не все. И в эти моменты мне приходится вствлять такие вещи:
Но это еще ладно, но в случае обработки события выбора списка вычислять элемент, которому принадлежит строка, приходится так:
Работает, но вот если бы можно было индексировать строки в Комбобоксе, либо делать "дырки" в номерах при создании - было бы гораздо проще |
| Автор: Coocky 14.9.2005, 10:53 | ||
| Dreamer_0x01 Нормальный подход.. Но я б лучше делал список недоступных строк, а потом проверял при выборе ... Единственное, чтоб сделал я еще для пользователя-так это маркировку недоступности-это осуществляется перерисовкой Комбобокса, либо подстановкой картинок(галочка для МОЖНО и крестик для НЕЛЬЗЯ) для СomboBoxEx Добавлено @ 10:58
itemState - состояние после перерисовки: ODS_CHECKED - Выбран ODS_DISABLED - Запрещен к выбору. ODS_FOCUS - Имеет фокус ODS_GRAYED - Элемент недоступен ODS_SELECTED - Элемент выбран ODS_DEFAULT - Элемент по умолчанию Вот то ,что тебе надо, возможно , что даже и отработает на недоступность |
| Автор: Dreamer_0x01 14.9.2005, 11:25 |
| О, спасибочки. Щас займусь. А недоступность выбора визуально как-то будет отражена? Либо все-таки придется крестики-галочки-фиг знает что лепить? Тогда вопрос - ведь крестик я так понимаю в родителях CWnd имеет? Может свой Паинт для этого CWnd определить можно и там самому что-то нарисовать? (Например, БитМэп влепить) |
| Автор: Coocky 14.9.2005, 11:41 | ||||
Dreamer_0x01 Не дури... Для ComboBoxEx есть список изображений, у тебя будет всего два изображения( крестик и галочка). Если надо-помогу.. Для ComboBox с перерисовкой нужно создать свой класс, производный отComboBox, и внем переопределить виртуалную функцию DrawItem() Короче делай, не получится помогу
Думаю, что да ,никогда просто недоступность не делал |
| Автор: Dreamer_0x01 14.9.2005, 14:18 |
| А еще тогда вопрос, ComboBoxEx - насколько "стандартный" контрол...Ну то есть опять я со своей проблемой - а будет ли он корректно работать под Windows95 ? |
| Автор: Coocky 14.9.2005, 14:46 |
| Судя по МСДН-все ОК! |