0
我試圖改變我從資源製作的列表視圖的行文本顏色。爲此,我在對話過程中處理NM_CUSTOMDRAW
。這是一個模態對話框,如果這很重要。根據the documentation, dwDrawStage
在返回CDRF_NOTIFYITEMDRAW
後應該等於CDDS_ITEMPREPAINT
。但這種情況並非如此。我正在爲每件商品收到CDDS_PREPAINT
。C++ winapi listview NM_CUSTOMDRAW:沒有獲取CDDS_ITEMPREPAINT
我做錯了什麼?
這是我對消息作出迴應:
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;
這些都是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
當你使用明細視圖(LVS_REPORT)更令人費解的,你必須自定義繪製的子項。這需要返回CDRF_NOTIFYSUBITEMDRAW |來自CDDS_PREPAINT階段的CDRF_NEWFONT。 [在此提及](https://msdn.microsoft.com/en-us/library/windows/desktop/ff919573(v = vs.85).aspx)。 –
現在我對整行進行着色並沒有問題,但我甚至無法在程序中使用它。我做了一些測試,並使用虛擬列表視圖創建了一個新的測試項目,我在窗口過程中處理了通知(因此沒有對話框),並且工作正常。也許它不工作,因爲模式對話框? – ptim
[從對話框過程返回值](https://blogs.msdn.microsoft.com/oldnewthing/20031107-00/?p=41923)。 – IInspectable