Witam,
chcę rysować HEADERa z ListView
Header wysyła NM_CUSTOMDRAW do ListView jak się chce odświeżyć - tak? Więc, subklasowałem LV i do procedury wpisałem kod:
case WM_NOTIFY:{
if(((HD_NOTIFY*)lParam) -> hdr.hwndFrom == ListView_GetHeader(hwnd)){
switch(((HD_NOTIFY*)lParam)->hdr.code){
case NM_CUSTOMDRAW:{
NMCUSTOMDRAW * nmc = (NMCUSTOMDRAW *)lParam;
switch(nmc -> dwDrawStage){
case CDDS_PREPAINT:{
RECT r;
GetClientRect(nmc -> hdr.hwndFrom, &r);
FillRect(nmc -> hdc, &r, gLBbrON); // bLBbrON - to BRUSH
}return CDRF_NOTIFYITEMDRAW;
case CDDS_ITEMPREPAINT:{
//Graphics graph(nmc -> hdc);
//LinearGradientBrush linGrBrush(
// Point(0, 0),
// Point(0, nmc -> rc.bottom),
// gClrTlo2,
// gClrTlo1);
//graph.FillRectangle(&linGrBrush, 0, 0, nmc -> rc.right, nmc -> rc.bottom);
FillRect(nmc -> hdc, &nmc -> rc, gLBbr);
}return CDRF_SKIPDEFAULT;
}
}break; // customdraw
} // switch
} // czy z headera
}break;
Czy to właśnie jest tak, że:
- najpierw dostaje CDDS_PREPAINT i jak zwrócę CDRF_NOTIFYITEMDRAW to dla każdego malowanego item'a w headerze dostanę..
- CDDS_ITEMPREPAINT i sobie tu namaluję itema i jak zwrócę CDRF_SKIPDEFAULT to znaczy, że sam go sobie pomalowałem i niech header idzie do następnego item'a.
Dobrze to wyczytałem? Jeśli tak to czemu to nie działa?? Tzn. działa tylko kod PREPAINT, a itemy już nie malują się. Tylko odrysowywana jest ta dziadowska ramka i separatory między itemami :-[