Clistctrl设置表格单元不同的颜色

添加对NM_CUSTOMDRAW消息的响应函数,OnNMCustomdrawList1,添加一个COLORREF类型的变量,colors用来保存颜色值。
BEGIN_MESSAGE_MAP(C1dFdm, CDialogEx)
ON_EN_SETFOCUS(IDC_EDIT14, &C1dFdm::OnSetBColor)
ON_WM_LBUTTONDOWN()
ON_EN_KILLFOCUS(IDC_EDIT14, &C1dFdm::OnEnKillfocusEdit14)
ON_EN_SETFOCUS(IDC_EDIT18, &C1dFdm::OnEnSetfocusEdit18)
ON_EN_KILLFOCUS(IDC_EDIT18, &C1dFdm::OnEnKillfocusEdit18)
ON_BN_CLICKED(IDC_BUTTON2, &C1dFdm::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON1, &C1dFdm::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON3, &C1dFdm::OnBnClickedButton3)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST1, &C1dFdm::OnNMCustomdrawList1)
END_MESSAGE_MAP()

void C1dFdm::OnNMCustomdrawList1(NMHDR pNMHDR, LRESULT pResult)
{
NMLVCUSTOMDRAW
pLVCD = reinterpret_cast>(pNMHDR); //关联pNMHDR
*pResult = CDRF_DODEFAULT;
// 检查绘画阶段。如果它是控件的预绘制阶段,那么Windows希望每个项目都有消息。
if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage)
{
// 这是一个项目的通知消息,将在每个子项的预画阶段之前请求通知。
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if ((CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage) //dwDrawStage状态为CDDS_ITEMPREPAINT | CDDS_SUBITEM时
{
int nItem = static_cast(pLVCD->nmcd.dwItemSpec);//表示行
int item=pLVCD->iSubItem;//表示列
switch (item)
{
case 2:///这里要设置每项的第三列的颜色,从0开始
{
pLVCD->clrText = colors[nItem];//保存了每项设置的颜色
pLVCD->clrTextBk = colors[nItem];
*pResult = CDRF_DODEFAULT;
break;
}
default:
pLVCD->clrText = RGB(0, 0, 0);
pLVCD->clrTextBk = RGB(255, 255, 255);
*pResult = CDRF_DODEFAULT;
break;
}
}
}

void C1dFdm::OnBnClickedButton3()//删除listctrl时,从colors数组中删除响应的颜色值
{
int n = m_list1.GetSelectionMark();//获取选中的项
int nlist = m_list1.GetItemCount();//获取一共多少项目
for (int i = n; i < nlist-1; i++)
{
colors[i] = colors[i + 1];///删除颜色,后面的颜色提前
}
colors[nlist - 1] = 0;
m_list1.DeleteItem(n);//删除相应项目

// TODO:  在此添加控件通知处理程序代码

}
void C1dFdm::OnBnClickedButton1()//添加
{
UpdateData(TRUE);
int n = m_list1.GetItemCount();
CString tmp;
//tmp.Format("%d", n);
//LV_ITEM item;
//item.mask = LVFIF_TEXT;
//item.iItem = n;
tmp.Format("%.2f", m_ysdepth);
m_list1.InsertItem(n, tmp);
//m_list1.SetItemText(n, 1, tmp);// 设置起始深度
tmp.Format("%.2f", m_yedepth);
m_list1.SetItemText(n, 1, tmp);// 设置终止深度
tmp.Format(“0X%X”, (int)ycolor);
m_list1.SetItemText(n, 2, tmp);// 设置颜色
tmp.Format("%.2f", m_yR);
m_list1.SetItemText(n, 3, tmp);// 设置R
// m_list1.SetIcon(IDR_MAINFRAME, TRUE);
colors[n] = ycolor;//设置添加的颜色
UpdateData(FALSE);
// TODO: 在此添加控件通知处理程序代码
}

你可能感兴趣的:(vc编程)