SDK ListView改變某一行某一列的文字顏色/背景顏色
阿新 • • 發佈:2018-12-22
註冊視窗類,CreateWindowEx建立視窗,同樣用這個函式建立一個ListView,新增一些ITEM。
在視窗訊息處理函式中處理WM_NOTIFY的NM_CUSTOMDRAW訊息,程式碼框架如下
LRESULT DoMsg(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE: { //do some thing } break; case WM_CLOSE: { //do some thing } break; case WM_NOTIFY: { LPNMHDR pNmhdr = (LPNMHDR)lParam; switch (pNmhdr->code) { case NM_CUSTOMDRAW: { //請確保是ListView的訊息,這裡未判斷 LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam; switch (lplvcd->nmcd.dwDrawStage) { case CDDS_PREPAINT: { return CDRF_NOTIFYSUBITEMDRAW; } break; case CDDS_ITEMPREPAINT: { return CDRF_NOTIFYSUBITEMDRAW; } break; case (CDDS_ITEMPREPAINT|CDDS_SUBITEM): { /* lplvcd->nmcd.dwItemSpec//行索引 lplvcd->iSubItem//列索引 lplvcd->clrText = RGB(255, 0, 0);//改變文字顏色 lplvcd->clrTextBk//背景顏色,未測試 */ return CDRF_DODEFAULT; } break; } } break; default: break; } } break; default: return DefWindowProc(hWnd, uMsg, wParam, lParam); } return S_OK; }
需要注意的是,如果你不打算改變某SubItem的顏色,也要對clrText進行修改,否則使用的就是上一次的顏色。
更多資訊請參閱MSDN,關鍵字"NM_CUSTOMDRAW"