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

24 篇文章 0 订阅

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;
}


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值