Ich versuche, die Zeile Textfarbe einer Listenansicht zu ändern, die ich von einer Ressource gemacht habe. Dafür handle ich NM_CUSTOMDRAW
in meinem Dialogprozess. Es ist ein modales Dialogfeld, wenn das wichtig ist. Nach the documentation, dwDrawStage
sollte CDDS_ITEMPREPAINT
nach der Rückkehr CDRF_NOTIFYITEMDRAW
entsprechen. Aber das ist nicht der Fall. Ich erhalte CDDS_PREPAINT
für jeden Artikel.C++ winapi listview NM_CUSTOMDRAW: bekomme CDDS_ITEMPREPAINT nicht
Was habe ich falsch gemacht? Diese
ist, wie ich auf die Nachricht antworten:
case WM_NOTIFY:
if (((LPNMHDR)lParam)->hwndFrom == GetDlgItem(hwnd, IDC_List2) && ((LPNMHDR)lParam)->code == NM_CUSTOMDRAW)
{
int result = CDRF_DODEFAULT;
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam;
switch (lplvcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
result = CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT: //never gets executed
lplvcd->clrText = RGB(255, 0, 0);
result = CDRF_NEWFONT;
break;
}
//SetWindowLongPtr(hEdit, DWLP_MSGRESULT, result);
//return TRUE;
return result;
}
break;
das sind die Eigenschaften des Listview:
IDC_List2,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,205,18,363,197,WS_EX_CLIENTEDGE
Es verschachtelter ist, wenn Sie die Daten verwenden, sehen (LVS_REPORT), die Sie individuell zeichnen die Unterpunkte haben werden. Dazu muss CDRF_NOTIFYSUBITEMDRAW | zurückgegeben werden CDRF_NEWFONT aus der CDDS_PREPAINT-Phase. [Erwähnt hier] (https://msdn.microsoft.com/en-us/library/windows/desktop/ff919573 (v = vs.85) .aspx). –
Ich bin vollkommen in Ordnung mit der Färbung der gesamten Reihe für jetzt, aber ich kann nicht einmal das in meinem Programm arbeiten. Ich habe ein wenig getestet und ein neues Testprojekt mit einer virtuellen Listenansicht erstellt, wo ich die Benachrichtigung im Fensterprozess (also ohne Dialog) bearbeitet habe, und es hat funktioniert. Vielleicht funktioniert es wegen des modalen Dialogfelds nicht? – ptim
[Zurückgeben von Werten aus einer Dialogprozedur] (https://blogs.msdn.microsoft.com/oldnewthing/20031107-00/?p=41923). – IInspectable