подстветить нужные item'ы в listbox
От: Timoha_Bravin Ниоткуда  
Дата: 19.02.14 16:11
Оценка:
Здравствуйте!
Имеется два listbox и соответственно два массива со значениями, согласно которым нужно подсвечивать определенные строки в listbox.
С самой поцветкой(выделением,highlight) разобрался: перегрузил DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct), pDC->FillRect(rcLabel, &CBrush(d0)), DrawText...
Ступор наступил, когда начал распределять highlight, читая массив. Предполагая, что DrawItem каждый раз вызывается сразу после вставки/работы со строками одного листбокса, я ввел переменную:
CurrentList=LIST_NUMBER_1;
list_1.InsertItem(0,(LPCSTR)(&buffer[0]));

и
CurrentList=LIST_NUMBER_2;
list_2.InsertItem(0,(LPCSTR)(&buffer[0]));

соответственно в DrawItem массив выбирается исходя из значений переменной.

но,
1) CurrentList всегда равен LIST_NUMBER_2
2) Такое ощущение(по точке останова), что функция DrawItem работает только для 2го listbox
3) lpDrawItemStruct меняются только ItemId, hDC, rcItem.

Подскажите, как нормально организовать highlight. Лучше без правки DrawItem-после построения всего списка, в родительском классе красиво вызвать в оформленной функции по типу(SetSel):
list_2.SetHighlight(int ItemID);
еще раз повторяю-важна привязка подцветки по массивам, а не абы как.
Re: подстветить нужные item'ы в listbox
От: Hawk Россия  
Дата: 25.02.14 09:45
Оценка:
Здравствуйте, Timoha_Bravin, Вы писали:

T_B>1) CurrentList всегда равен LIST_NUMBER_2

T_B>2) Такое ощущение(по точке останова), что функция DrawItem работает только для 2го listbox
T_B>3) lpDrawItemStruct меняются только ItemId, hDC, rcItem.

А зачем все так сложно? Чем CListCtrl::SetItemState() не подходит?

P.S. Если у вас список в одну колонку, имеет смысл использовать CListBox — он заметно проще.
Re[2]: подстветить нужные item'ы в listbox
От: Timoha_Bravin Ниоткуда  
Дата: 25.02.14 13:08
Оценка:
Здравствуйте, Hawk, Вы писали:

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


T_B>>1) CurrentList всегда равен LIST_NUMBER_2

T_B>>2) Такое ощущение(по точке останова), что функция DrawItem работает только для 2го listbox
T_B>>3) lpDrawItemStruct меняются только ItemId, hDC, rcItem.

H>А зачем все так сложно? Чем CListCtrl::SetItemState() не подходит?


H>P.S. Если у вас список в одну колонку, имеет смысл использовать CListBox — он заметно проще.


Нет, CheckBox, к сожалению, не подходит. Надо именно подсветить.
Элемента (ListBox) два (2 шт.).
Re: подстветить нужные item'ы в listbox
От: kero Россия  
Дата: 25.02.14 17:17
Оценка:
Здравствуйте, Timoha_Bravin, Вы писали:

прочитал мельком, но просто на всякий случай: о LBS_MULTIPLESEL в курсе?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re: подстветить нужные item'ы в listbox
От: Serpuh фотомер.рф
Дата: 26.02.14 06:58
Оценка:
Вот картинка из примера "Visual C++ 2008 Feature Pack" -> NewControls. Оно?

Re[2]: подстветить нужные item'ы в listbox
От: Аноним  
Дата: 26.02.14 13:01
Оценка:
Здравствуйте, Serpuh, Вы писали:

S>Вот картинка из примера "Visual C++ 2008 Feature Pack" -> NewControls. Оно?


S>http://s004.radikal.ru/i208/1402/b6/adeec51906d3.jpg


CMFCListCtrl унаследован от CListCtrl, а это не совсем то, что хочет автор. BCGSoft (авторы Feature Pack) в последних версиях свой ListBox вроде заточили под highlighting:

Re[3]: подстветить нужные item'ы в listbox
От: Hawk Россия  
Дата: 26.02.14 16:42
Оценка:
Автор, похоже, все-таки не выделение имеет в виду, а именно раскраску. Так что CMFCListCtrl — как раз то, что нужно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.