設置LISTControl控件某一行的背景和文字顏色


定義宏

用listcontrol的SetItemData設置某一行的屬性,通過自定義屬性標識實現。

自定義某行內容顏色屬性:

#define COLOR_DEFAULT 0 //默認顏色
#define COLOR_RED 1 //紅色
#define COLOR_BLUE 2 //藍色

定義消息

調用BOOL SetItemData(In int nItem, In DWORD_PTR dwData);

其中nItem為某行位置,下標以0開始,dwData可為自定義顏色屬性。

然后在LISTControl控件中的NM_CUSTOMDRAW事件中處理。

void CListControlExampleDlg::OnNMCustomdrawList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMTVCUSTOMDRAW pNMCD = reinterpret_cast<LPNMTVCUSTOMDRAW>(pNMHDR);
	// TODO: 在此添加控件通知處理程序代碼
	NMCUSTOMDRAW nmCustomDraw = pNMCD->nmcd;
	switch(nmCustomDraw.dwDrawStage)
	{
	case CDDS_ITEMPREPAINT:
		{
			if (COLOR_BLUE == nmCustomDraw.lItemlParam)
			{
				pNMCD->clrTextBk = RGB(51, 153, 255);
				pNMCD->clrText = RGB(255, 255, 255);
			}
			else if (COLOR_RED == nmCustomDraw.lItemlParam)
			{
				pNMCD->clrTextBk = RGB(255, 0, 0);		//背景顏色
				pNMCD->clrText = RGB(255, 255, 255);		//文字顏色
			}
			else if (COLOR_DEFAULT == nmCustomDraw.lItemlParam)
			{
				pNMCD->clrTextBk = RGB(255, 255, 255);
				pNMCD->clrText = RGB(0, 0, 0);
			}
			else
			{
				//
			}
			break;
		}
	default:
		{
			break;	
		}
	}
 
	*pResult = 0;
	*pResult |= CDRF_NOTIFYPOSTPAINT;		//必須有,不然就沒有效果
	*pResult |= CDRF_NOTIFYITEMDRAW;		//必須有,不然就沒有效果
	return;
}

調用方法

void CListControlExampleDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知處理程序代碼
	m_lstControl.SetItemData(0, COLOR_BLUE);
	m_lstControl.SetItemData(1, COLOR_DEFAULT);

	return;
}
 
 
void CListControlExampleDlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知處理程序代碼
	m_lstControl.SetItemData(0, COLOR_DEFAULT);
	m_lstControl.SetItemData(1, COLOR_RED);

	return;
}

參考

mfc中設置listcontrol某一行的背景和文字顏色

https://blog.csdn.net/langxm2006/article/details/76736153/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM