Выручайте. Сам разобраться не могу Задача: сделать виртуальный список (использовать LVN_GETDISPINFO) и взять на себя отрисовку каждого итема (NM_CUSTOMDRAW). Ловлю WM_NOTIFY: NMHDR *pNMHDR= (NMHDR*)lParam; 1) switch(pNMHDR->code){ 2) case LVN_GETDISPINFO: 3) OnGetdispinfoListMain(pNMHDR, pResult); 4) break; 5) case NM_CUSTOMDRAW: 6) OnCustomDraw(pNMHDR, pResult); 7) break; 8) } При таком раскладе работает LVN_GETDISPINFO. Но NM_CUSTOMDRAW не приходят сообщения для отрисовки итемов. Стоит закомментировать 3 строку, OnCustomDraw нормально все рисует. То есть нельзя почему то одновременно использовать LVN_GETDISPINFO и NM_CUSTOMDRAW. Как быть?
perez не приходят сообщения для отрисовки итемов Приходят. Пример обработчиков LVN_GETDISPINFO и NM_CUSTOMDRAW Код (Text): ... // создание ListView const DWORD style = WS_CHILD | WS_BORDER | WS_VISIBLE | LVS_AUTOARRANGE | LVS_REPORT | LVS_OWNERDATA; hwndLV = CreateWindowEx(0, WC_LISTVIEW, TEXT(""), style, ... ... // оконная процедура, обработчик WM_NOTIFY case WM_NOTIFY: if (((LPARAM) NULL != lParam) && (hwndLV == ((LPNMHDR) lParam)->hwndFrom)) { TCHAR buf[128]; switch (((LPNMHDR) lParam)->code) { case LVN_GETDISPINFO: { NMLVDISPINFO *plvdi = (NMLVDISPINFO *) lParam; if (0 != plvdi->item.iSubItem) { if (plvdi->item.mask & LVIF_TEXT) { wsprintf(buf, TEXT("Row %d Col %d"), plvdi->item.iItem, plvdi->item.iSubItem); lstrcpy(plvdi->item.pszText, buf); } } else { if (plvdi->item.mask & LVIF_TEXT) { wsprintf(buf, TEXT("Item %d"), plvdi->item.iItem); lstrcpy(plvdi->item.pszText, buf); } if (plvdi->item.mask & LVIF_IMAGE) plvdi->item.iImage = 0; } return 0; } case NM_CUSTOMDRAW: { NMLVCUSTOMDRAW *plvcd = (NMLVCUSTOMDRAW *) lParam; switch (plvcd->nmcd.dwDrawStage) { case CDDS_PREPAINT: OutputDebugString(TEXT("CDDS_PREPAINT")); return CDRF_NOTIFYITEMDRAW; case CDDS_ITEMPREPAINT: wsprintf(buf, TEXT("CDDS_ITEMPREPAINT Item %d"), plvcd->nmcd.dwItemSpec); OutputDebugString(buf); return CDRF_NOTIFYSUBITEMDRAW; case CDDS_SUBITEM | CDDS_ITEMPREPAINT: wsprintf(buf, TEXT("CDDS_SUBITEM | CDDS_ITEMPREPAINT Row %d Col %d"), plvcd->nmcd.dwItemSpec, plvcd->iSubItem); OutputDebugString(buf); return CDRF_DODEFAULT; } return CDRF_DODEFAULT; } } ... выхлоп можно увидеть при помощи Dbgview by Sysinternals.