Для возможности самостоятельного слежения за прорисовкой строк класса CListBox необходимо установить стиль Owner Draw. Установка этого стиля говорит о том, что за перерисовку строк будет отвечать программа, а не Control. Вот где ставится этот стиль:
После установки этого стиля нам тут же надо перегрузить две виртуальные функции. Одна отвечает за прорисовку элементов списка, вторая за сравнение. Если этого не сделать, то в ходе выполнения произойдут ошибки. Кстати мы работаем со старым проектом из прошлых шагов.
void CTestList::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { // TODO: Add your code to draw the specified item } int CTestList::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct) { // TODO: Add your code to determine the sorting order of the specified items // return -1 = item 1 sorts before item 2 // return 0 = item 1 and item 2 sort the same // return 1 = item 1 sorts after item 2 return 0; }
Напишем функцию, которая выводит строки красным цветом ??? Вот код:
void CTestList::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { CDC dc; dc.Attach(lpDrawItemStruct->hDC); CRect rect; rect=lpDrawItemStruct->rcItem; dc.SetTextColor(RGB(255,0,0)); dc.DrawText((LPSTR)lpDrawItemStruct->itemData,rect, DT_LEFT | DT_WORDBREAK); dc.Detach(); }
Используем обычные функции CDC.