Нижеследующий фрагмент кода - это часть обработчика сообщения WM_NOTIFY, который иллюстрирует, как обработать уведомления специального рисования, отправленные органу управления Одноуровневый список элементов (list-view):
Демонстрационный пример
LPNMLISTVIEW pnm = (LPNMLISTVIEW)lParam; switch (pnm->hdr.code){ ... case NM_CUSTOMDRAW: LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam; switch(lplvcd->nmcd.dwDrawStage) { case CDDS_PREPAINT : return CDRF_NOTIFYITEMDRAW; 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); /* В этой точке, Вы можете изменить цвет фона для элемента и любого подпункта и возвратить значение CDRF_NEWFONT. Если орган управления Одноуровневый список элементов (list-view) находится в режиме сообщения, Вы можете просто возвратить значение CDRF_NOTIFYSUBITEMREDRAW, чтобы настроить подпункты элемента индивидуально. */ ... return CDRF_NEWFONT; // или возвратить CDRF_NOTIFYSUBITEMREDRAW; 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)); /* Это уведомление будет получено только тогда, если Вы находитесь в режиме сообщения и возвращали значение CDRF_NOTIFYSUBITEMREDRAW в предыдущем шаге. В этой точке, Вы можете изменить цвета фона для подпункта и возвратить значение CDRF_NEWFONT.*/ ... return CDRF_NEWFONT; } ... } |
Первое уведомление NM_CUSTOMDRAW имеет член dwDrawStageа структуры NMCUSTOMDRAW установленный в CDDS_PREPAINT. Обработчик возвращает значение CDRF_NOTIFYITEMDRAW, чтобы указать на то, что он желает модифицировать один или несколько элементов индивидуально.
Если значение CDRF_NOTIFYITEMDRAW возвращалось в предыдущем шаге, следующее уведомление NM_CUSTOMDRAW имеет dwDrawStage установленный в CDDS_ITEMPREPAINT. Обработчик извлекает текущий цвет и значения шрифта. В этой точке, Вы можете определить новые значения для маленького значка, большого значка и перечислить режимы. Если орган управления находится в режиме сообщения, Вы можете также определить новые значения, которые будут применены ко всем подпунктам элемента. Если Вы изменили что-нибудь, то возвратите значение CDRF_NEWFONT. Если орган управления находится в режиме сообщения, а Вы хотите обработать подпункты индивидуально, возвратите значение CDRF_NOTIFYSUBITEMREDRA .
Конечное уведомление отправляется только тогда, если орган управления находится в режиме сообщения, а Вы в предыдущем шаге возвращали значение CDRF_NOTIFYSUBITEMREDRAW. Процедура для того, чтобы изменять шрифты и цвета - та же самая как и этот шаг, но она обращается только к единичному подпункту. Возвратите значение CDRF_NEWFONT, чтобы уведомить орган управления, если цвет или шрифт изменялись.
Назад в оглавление |
На главную страницу |