CListCtrl控件可以显示一行行的数据,可以改变某一行的底色。
如果此List是继承于CListCtrl的CColorListCtrl
则直接用以下代码即可实现改变行颜色
m_listNcrTask.SetItemColor(1,RGB(12,153,0));
但是如果此List是可以编辑的CComboListCtrl类,且继承于CListCtrl
则采用以下方法:
首先是添加以下消息
BEGIN_MESSAGE_MAP(CXXDlg, CDialog)
END_MESSAGE_MAP()
中加入以下代码,注意将IDC_LIST1修改为对应的表格名字即可
ON_NOTIFY( NM_CUSTOMDRAW, IDC_LIST1,OnDrawColorForMyList ) //为改变颜色添加的消息
再添加类成员函数,就OK了:
在CXXDlg类中手动添加OnDrawColorForMyList函数
//改变 m_List 控件单行的颜色
void CXXDlg::OnDrawColorForMyList( NMHDR *pNmHdr, LRESULT *pResult )
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNmHdr );
*pResult = CDRF_DODEFAULT;
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 )
{
COLORREF clrNewTextColor, clrNewBkColor;
int nItem = static_cast<int>( pLVCD->nmcd.dwItemSpec );
// 显示字体为红色 s
clrNewTextColor = RGB( 255, 0, 0 );
//设置背景色
if( nItem%2 ==0 )
{
clrNewBkColor = RGB(181,249,185); //偶数行背景色为绿色
}
else
{
clrNewBkColor = RGB( 255, 255, 255 ); //奇数行背景色为白色
}
pLVCD->clrText = clrNewTextColor;
pLVCD->clrTextBk = clrNewBkColor;
*pResult = CDRF_DODEFAULT;
}
}
高亮及取消高亮
m_List.SetItemState(0,LVIS_DROPHILITED,LVIS_DROPHILITED);
UINT nState=m_List.GetItemState(1,LVIF_STATE);
nState&=!nState;
m_List.SetItemState(1,nState,LVIF_STATE);
/