Clistview列表显示时我想隔行不同颜色显示怎么做? 隔行不同颜色的话就不容易看混 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 重载CListCtrl, 实现NM_CUSTOMDRAW消息处理:ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)void CMyListCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) { NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR ); *pResult = 0; 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 ) { int nItem = static_cast<int> (pLVCD->nmcd.dwItemSpec); int nSubItem = pLVCD->iSubItem; CListCtrl* pList=(CListCtrl*)CWnd::FromHandle(m_hWnd); CString strText=pList->GetItemText(nItem,1); if(nItem%2==0) pLVCD->clrTextBk=RGB(255,255,255); else pLVCD->clrTextBk=RGB(232,232,232); *pResult = CDRF_DODEFAULT; }} 学习楼上的方法不过现在已经有些封装好的第三方库,功能更强大比如说bcg楼主可以看一下www.bcgsoft.com http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c1093/ void CReportCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) { LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR; if (lplvcd->nmcd.dwDrawStage == CDDS_PREPAINT) { *pResult = CDRF_NOTIFYITEMDRAW; } else if (lplvcd->nmcd.dwDrawStage == CDDS_ITEMPREPAINT) { *pResult = CDRF_NOTIFYSUBITEMDRAW; } else if (lplvcd->nmcd.dwDrawStage == (CDDS_ITEMPREPAINT | CDDS_SUBITEM)) { if (lplvcd->nmcd.dwItemSpec%2) lplvcd->clrTextBk = RGB(224, 241, 255);elselplvcd->clrTextBk = RGB(224,111, 255); *pResult = CDRF_DODEFAULT; }} 如何禁用Datagrid左下角的Spliter? 请教高手一个问题(关于MFC) 这样的问题都问了一遍,怎么就是还没有人知道道? 请问如何在自己写的类里得到父窗口的指针? [急]请教:如何遍历设备的MAC地址 HOHO:玩弄过CListCtrl的请来看一看,如何更改背景的伸展性?(分少,只给一个人,不好意思) 在网上找到一个跨平台(Win32,Linux,Unix,MacOS)多线程框架:zThread,望大家讨论使用方法 IP问题 做了几年VC了,一个简单的问题还是不明白 请教一个与CFileDialog有关的问题 问下什么品牌的采集卡好点? 播放VCD的问题
void CMyListCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR ); *pResult = 0; 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 )
{
int nItem = static_cast<int> (pLVCD->nmcd.dwItemSpec);
int nSubItem = pLVCD->iSubItem; CListCtrl* pList=(CListCtrl*)CWnd::FromHandle(m_hWnd);
CString strText=pList->GetItemText(nItem,1); if(nItem%2==0)
pLVCD->clrTextBk=RGB(255,255,255);
else
pLVCD->clrTextBk=RGB(232,232,232); *pResult = CDRF_DODEFAULT;
}
}
比如说bcg
楼主可以看一下www.bcgsoft.com
{
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR; if (lplvcd->nmcd.dwDrawStage == CDDS_PREPAINT)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if (lplvcd->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
{
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if (lplvcd->nmcd.dwDrawStage == (CDDS_ITEMPREPAINT | CDDS_SUBITEM))
{
if (lplvcd->nmcd.dwItemSpec%2)
lplvcd->clrTextBk = RGB(224, 241, 255);
else
lplvcd->clrTextBk = RGB(224,111, 255);
*pResult = CDRF_DODEFAULT;
}
}