Нижеследующий фрагмент кода - это часть обработчика сообщения 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, чтобы уведомить орган управления, если цвет или шрифт изменялись.
| Назад в оглавление |
| На главную страницу |