Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ССomboBox, Можно ли задать собсвенную нумерацию? 
:(
    Опции темы
Dreamer_0x01
Дата 14.9.2005, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



Имеется ССomboBox.

при добавлеии в него элементов "по-простому" типа AddString()строки нумеруются в порядке добавления. (сортировка естественно отключна).

И по GetCurSel и SetCurSel мы определяем/задаем номер текущей выбранной/выбираемой строки.

Можно ли создать "Дырявый" комбобокс, чтобы номера строк в нем были к примеру {0,2,3,5,6,8} ?
И по GetCurSel чтобы возвращались эти числа?


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Coocky
Дата 14.9.2005, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Цитата(Dreamer_0x01 @ 14.9.2005, 09:33)
Можно ли создать "Дырявый" комбобокс, чтобы номера строк в нем были к примеру {0,2,3,5,6,8} ?

Дружище, ты начинаешь меня пугать smile Можно полюбопытствовать-зачем? Может другое решение найдем..
Да, забыл ответить: но вопросом на вопрос- можно ли сделать "дырявый" массив? smile



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Dreamer_0x01
Дата 14.9.2005, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



Объясняю.
В зависимости от разных ситуаций в программе мне надо сделать недоступным выбор некоторых пунктов. Задизейблить строку нельзя. Поэтому приходится каждый раз удалять/добавлять строки, причем чтобы нумерация была в нужном мне порядке, приходится сначала все удалить, а потом нужное мне снова добавить.

То есть у меня имеется массив данных МОЯ_СТРУКТУРА М[N];
В зависимости от ситуации мне ладо отображать в комбобоксе только определенные элементы в этой структуре, то есть не все.

И в эти моменты мне приходится вствлять такие вещи:
Код

while(MyComboBox.DeleteString(0));//все удалили
for(int i=0;i<N;i++)
{
if (M[i].мое_условие)MyComboBox.AddString(M[i].строковые_данные);
}


Но это еще ладно, но в случае обработки события выбора списка вычислять элемент, которому принадлежит строка, приходится так:

Код

int cs=MyComboBox.GetCurSel();
int i=-1;//соответствующий элемент массива
while (cs>=0)
{
i++;
if(M[i].мое_условие)сs--;
}
//теперь в i содержится нужный нам индекс массива, соответствующий выбранной строке


Работает, но вот если бы можно было индексировать строки в Комбобоксе, либо делать "дырки" в номерах при создании - было бы гораздо проще smile


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Coocky
Дата 14.9.2005, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Dreamer_0x01
Нормальный подход..
Но я б лучше делал список недоступных строк, а потом проверял при выборе ...
Единственное, чтоб сделал я еще для пользователя-так это маркировку недоступности-это осуществляется перерисовкой Комбобокса, либо подстановкой картинок(галочка для МОЖНО и крестик для НЕЛЬЗЯ) для СomboBoxEx
Добавлено @ 10:58
Код

typedef struct tagDRAWITEMSTRUCT 
{
    UINT        CtlType;        // Тип элемента управления
    UINT        CtlID;        // Идентификатор элемента управления
    UINT        itemID;        // Идентификатор перерисовываемого пункта
    UINT        itemAction;        // Как перерисовывать
    UINT        itemState;        // Состояние после перерисовки
    HWND        hwndItem;        // Дескриптор элемента управления
    HDC         hDC;        // Контекст устройства рисования
    RECT        rcItem;        // Граница рисования
    DWORD       itemData;        // Адрес элемента для перерисовки
} DRAWITEMSTRUCT, NEAR *PDRAWITEMSTRUCT, FAR *LPDRAWITEMSTRUCT;



itemState - состояние после перерисовки:

ODS_CHECKED - Выбран
ODS_DISABLED - Запрещен к выбору.
ODS_FOCUS - Имеет фокус

ODS_GRAYED - Элемент недоступен

ODS_SELECTED - Элемент выбран
ODS_DEFAULT - Элемент по умолчанию

Вот то ,что тебе надо, возможно , что даже и отработает на недоступность smile


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Dreamer_0x01
Дата 14.9.2005, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



О, спасибочки. Щас займусь.
А недоступность выбора визуально как-то будет отражена?
Либо все-таки придется крестики-галочки-фиг знает что лепить?
Тогда вопрос - ведь крестик я так понимаю в родителях CWnd имеет? Может свой Паинт для этого CWnd определить можно и там самому что-то нарисовать? (Например, БитМэп влепить) smile


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Coocky
Дата 14.9.2005, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Цитата

Либо все-таки придется крестики-галочки-фиг знает что лепить?
Тогда вопрос - ведь крестик я так понимаю в родителях CWnd имеет? Может свой Паинт для этого CWnd определить можно и там самому что-то нарисовать? (Например, БитМэп влепить) 


Dreamer_0x01
Не дури... smile
Для ComboBoxEx есть список изображений, у тебя будет всего два изображения( крестик и галочка).
Если надо-помогу..
Для ComboBox с перерисовкой нужно создать свой класс, производный отComboBox, и внем переопределить виртуалную функцию DrawItem()
Короче делай, не получится помогу smile
Цитата(Dreamer_0x01 @ 14.9.2005, 11:25)
А недоступность выбора визуально как-то будет отражена?

Думаю, что да ,никогда просто недоступность не делал smile

Это сообщение отредактировал(а) Coocky - 14.9.2005, 11:41


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Dreamer_0x01
Дата 14.9.2005, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



А еще тогда вопрос, ComboBoxEx - насколько "стандартный" контрол...Ну то есть опять я со своей проблемой - а будет ли он корректно работать под Windows95 ?


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Coocky
Дата 14.9.2005, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Судя по МСДН-все ОК!


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


 




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


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

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