Шаг 275 - Класс CListBox, отрисовываем пункты списка сами

Для возможности самостоятельного слежения за прорисовкой строк класса CListBox необходимо установить стиль Owner Draw. Установка этого стиля говорит о том, что за перерисовку строк будет отвечать программа, а не Control. Вот где ставится этот стиль:

275_1.gif (3193 b)

После установки этого стиля нам тут же надо перегрузить две виртуальные функции. Одна отвечает за прорисовку элементов списка, вторая за сравнение. Если этого не сделать, то в ходе выполнения произойдут ошибки. Кстати мы работаем со старым проектом из прошлых шагов.

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.

275_2.gif (1315 b)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 13.11.2000