sdk改变ListCtrl某一行的字体颜色或者背景颜色

来源:互联网 发布:seo自学论坛 编辑:程序博客网 时间:2024/06/06 18:55

ListCtrl的字体颜色如果直接通过SetTextColour设置的话会改变所有行的字体颜色,sdk的对话框工程想要改变ListCtrl的某一行颜色需要注意一下几点:

1.在ListCtrl的父窗口响应WM_NOTIFY消息。

2.处理WM_NOTIFY的NM_CUSTOMDRAW消息,处理完之后通过SetWindowLong设置对话框返回结果。

3.处理完返回结果后对话框的回调函数要返回1。

具体代码如下:

LRESULT TableDraw (LPARAM lp){int iRow;LPNMLVCUSTOMDRAW pListDraw = (LPNMLVCUSTOMDRAW)lp;switch(pListDraw->nmcd.dwDrawStage){case CDDS_PREPAINT:return (CDRF_NOTIFYPOSTPAINT | CDRF_NOTIFYITEMDRAW);case CDDS_ITEMPREPAINT:{//pListDraw->clrText = RGB(0, 0, 255);pListDraw->clrTextBk = RGB(221, 222, 201);}return CDRF_NEWFONT;default:break;}return CDRF_DODEFAULT;}

VOID OnNotify(HWND hdlg, WPARAM wp, LPARAM lp){NMHDR *header = (LPNMHDR)lp;if (s_dev_list == header->hwndFrom && NM_CUSTOMDRAW == header->code){LPNMLISTVIEW pnm;pnm = (LPNMLISTVIEW)lp;if(pnm->hdr.hwndFrom == s_dev_list && pnm->hdr.code == NM_CUSTOMDRAW){SetWindowLong(hdlg, DWL_MSGRESULT, long(TableDraw(lp)));}}}BOOL CALLBACK MainProc(HWND hdlg, UINT msg, WPARAM wp, LPARAM lp){int ret = 0;switch(msg){case WM_INITDIALOG:{OnInitDialog(hdlg);}break;case  WM_NOTIFY:{OnNotify(hdlg, wp, lp);ret = 1;}break;case  WM_CLOSE:EndDialog(hdlg, 0);break;default:break;}return ret;}


0 0
原创粉丝点击