Здравствуйте, pe, Вы писали:
pe>Здравствуйте, visual_wind, Вы писали:
_>>Здравствуйте, pe, Вы писали:
pe>>>Переопределяю функцию DrawItem в CListCtrl. При перерисовке эта функция вызывается для каждой строки, но перерисовывается при этом только первая строка. Остальные перерисовываются только после кликанья по ним мышой. Как решить эту проблему?
_>>Посмотрите, как Вы используете поле itemID структуры DRAWITEMSTRUCT, это индекс строки. _>>А лучше, покажите всю функцию.
pe>Функция: pe>void MyClass::DrawItem(LPDRAWITEMSTRUCT dis) { pe> CDC dc; pe> dc.Attach(dis->hDC); pe> CRect rc = dis->rcItem; pe> dc.FillRect(&rc, &CBrush(RGB(255, 255, 220))); dc.Detach(); pe>}
pe>Причем она вызывается для каждой строки и в rc координаты правильные, т.е. соответствующие строке.
Насчет правильности координат возражений нет, а в данной функции Вы забыли вызвать dc.Detach();
Помимо этого, передавать адрес стекового объекта в функцию FillRect нежелательно. Лучше завести переменную типа CBrush в Вашем классе и идин раз проинициализировать ее:
class MyClass: public CListCtrl
{
...
protected:
CBrush m_brush;
...
}