Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.128.94.171] |
|
Сообщ.
#1
,
|
|
|
Всем привет
Необходимо раскрасить ячейки элемента CListCtrl Делаю так: NOTIFY_HANDLER (IDC_LIST__DATA, NM_CUSTOMDRAW, OnNMCustomDraw) LRESULT CPageDataDlg::OnNMCustomDraw ( __in int /*idCtrl*/, __in LPNMHDR pNMHDR, __inout BOOL& /*bHandled*/ ) { NMLVCUSTOMDRAW* pLVCustomDraw = (NMLVCUSTOMDRAW*)pNMHDR; LRESULT lResult = CDRF_DODEFAULT; switch(pLVCustomDraw->nmcd.dwDrawStage) { case CDDS_PREPAINT: lResult |= CDRF_NOTIFYITEMDRAW; break; case CDDS_ITEMPREPAINT: { pLVCustomDraw->clrText = RGB(0, 0, 0); pLVCustomDraw->clrTextBk = RGB(0,255,0); lResult |= CDRF_NEWFONT; } break; } return lResult; } Вроде все ок, но раскрашивается сразу вся строка, а я хочу с точностью до ячейки - вот как узнать какая колонка сейчас обрабатывается? Ряд можно получить через pLVCustomDraw->nmcd.dwItemSpec |
Сообщ.
#2
,
|
|
|
case CDDS_ITEMPREPAINT: SelectObject(lplvcd->nmcd.hdc, GetFontForItem(lplvcd->nmcd.dwItemSpec, lplvcd->nmcd.lItemlParam) ); lplvcd->clrText = GetColorForItem(lplvcd->nmcd.dwItemSpec, lplvcd->nmcd.lItemlParam); lplvcd->clrTextBk = GetBkColorForItem(lplvcd->nmcd.dwItemSpec, lplvcd->nmcd.lItemlParam); /* At this point, you can change the background colors for the item and any subitems and return CDRF_NEWFONT. If the list-view control is in report mode, you can simply return CDRF_NOTIFYSUBITEMDRAW to customize the item's subitems individually */ ... return CDRF_NEWFONT; // or return CDRF_NOTIFYSUBITEMDRAW; case CDDS_SUBITEM | CDDS_ITEMPREPAINT: SelectObject(lplvcd->nmcd.hdc, GetFontForSubItem(lplvcd->nmcd.dwItemSpec, lplvcd->nmcd.lItemlParam, lplvcd->iSubItem)); lplvcd->clrText = GetColorForSubItem(lplvcd->nmcd.dwItemSpec, lplvcd->nmcd.lItemlParam, lplvcd->iSubItem)); lplvcd->clrTextBk = GetBkColorForSubItem(lplvcd->nmcd.dwItemSpec, lplvcd->nmcd.lItemlParam, lplvcd->iSubItem)); /* This notification is received only if you are in report mode and returned CDRF_NOTIFYSUBITEMDRAW in the previous step. At this point, you can change the background colors for the subitem and return CDRF_NEWFONT.*/ ... return CDRF_NEWFONT; Обратите внимание на комментарий. Взято отсюда. |
Сообщ.
#3
,
|
|
|
Точно - надо было
case CDDS_ITEMPREPAINT: { lResult |= CDRF_NEWFONT | CDRF_NOTIFYSUBITEMDRAW; } break; case CDDS_SUBITEM | CDDS_ITEMPREPAINT: { lResult |= CDRF_NEWFONT | CDRF_NOTIFYSUBITEMDRAW; } break; |