Здравствуйте, Аноним, Вы писали:
А>Эээ..., из приведённого кода не видно, как Вы обрабатываете dwDrawStage...
А>Скажем такой вариант правильно выдаёт: ?
А>А>switch ( pNMCD->nmcd.dwDrawStage )
А>{
А>case CDDS_PREPAINT:
А> {
А> *pResult = CDRF_NOTIFYITEMDRAW;
А> break;
А> }
А>case CDDS_ITEMPREPAINT:
А> {
А> TRACE("Item %d, SubItem %d\n", pNMCD->nmcd.dwItemSpec, pNMCD->iSubItem);
А> *pResult = CDRF_SKIPDEFAULT;
А> break;
А> }
А>default:
А> {
А> *pResult = 0;
А> break;
А> }
А>}
А>
Ну в принципе, я то же самое делаю. Вот код:
if (pLVCustomDraw->nmcd.dwDrawStage == CDDS_PREPAINT)
{
// Это, чтобы получать нотификацию CustomDraw
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if (pLVCustomDraw->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
{
// Это присылается на нулевую колонку (то есть собственно item). Здесь
// меня устраивает отрисовка по умолчанию, поэтому я возвращаю CDRF_DODEFAULT
// и заказываю нотификацию о перерисовке subitems через возврат CDRF_NOTIFYSUBITEMDRAW
*pResult = CDRF_DODEFAULT | CDRF_NOTIFYSUBITEMDRAW;
}
else if ((pLVCustomDraw->nmcd.dwDrawStage & CDDS_SUBITEM) == CDDS_SUBITEM)
{
// А это присылается на каждую колонку (то есть subitem). Две из них я
// рисую сам, а остальные - по умолчанию
switch (pLVCustomDraw->iSubItem)
{
case COL_GRAPHIC1:
... тут рисуем ...
*pResult = CDRF_SKIPDEFAULT | CDRF_NOTIFYSUBITEMDRAW;
break;
case COL_GRAPHIC2:
... и тут рисуем ...
*pResult = CDRF_SKIPDEFAULT | CDRF_NOTIFYSUBITEMDRAW;
break;
default:
... а эти (все остальные) ListCtrl рисует сам ...
*pResult = CDRF_NOTIFYPOSTPAINT | CDRF_NOTIFYSUBITEMDRAW;
break;
}
}
else if (pLVCustomDraw->nmcd.dwDrawStage == CDDS_ITEMPOSTPAINT)
{
// А тут освобождаются некоторые ресурсы (типа шрифтов)
}