解决方案 »

  1.   

    WTL不太清楚,MFC中CListCtrl的话,重写该类,添加处理DrawItem虚函数,在DrawItem中设置
      

  2.   


    网上一大堆这方面MFC编码,我看了,尝试了,不行,哎…… 无奈WTL就不行,能力有限~
      

  3.   

    NOTIFY_HANDLER(IDC_LIST1, NM_CUSTOMDRAW, OnNMCustomdrawList1)LRESULT OnNMCustomdrawList1(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/);
    LRESULT CMainDlg::OnNMCustomdrawList1(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/)
    {
    LPNMLVCUSTOMDRAW pLVNMCD = reinterpret_cast< LPNMLVCUSTOMDRAW>(pNMHDR);
    int nResult = CDRF_DODEFAULT; 
    if (CDDS_PREPAINT == pLVNMCD->nmcd.dwDrawStage)
    {
    nResult = CDRF_NOTIFYITEMDRAW;
    }
    else if (CDDS_ITEMPREPAINT == pLVNMCD->nmcd.dwDrawStage)
    {
    nResult = CDRF_NOTIFYSUBITEMDRAW;
    }
    else if (pLVNMCD->nmcd.dwDrawStage == (CDDS_ITEMPREPAINT|CDDS_SUBITEM))
    {
                    //单双行不同颜色
    if (pLVNMCD->nmcd.dwItemSpec%2 == 0)
    {
    pLVNMCD->clrText = RGB(60, 128, 160);
    }
    else
    {
    pLVNMCD->clrText = RGB(80, 160, 80);
    }
    }

    return nResult;
    }
      

  4.   


    重点是我想写个那种类似SetItemColor的接口,该如何写,你这个是单双行不同颜色,我用m_lstFileList.SetItemData(nRow, (DWORD)clrNewColor);但是每次运行都报错,控件和对象也都关联了,不知道为什么?
      

  5.   

    你是想这样吗?
    INT nItem = pLVNMCD->nmcd.dwItemSpec;//行
    INT nSubItem = pLVNMCD->iSubItem; //列if (nItem==3 && nSubitem==3)//第4行的第4列文字颜色设置为RGB(60, 128, 160);
    {
            pLVNMCD->clrText = RGB(60, 128, 160);
    }
      

  6.   


    对,是想封装这个ListViewCtrl,想写一个接口函数,昨天晚上憋了一晚上,感觉不好写。
      

  7.   

    私信Me,留个email。
    我比较推荐继承并嵌入COwnerDraw重载DrawItem。
    你的问题可能是,必须在ListViewCtrl的父窗口的消息映射中加上
    DEFAULT_REFLECTION_HANDLER()
      

  8.   

    发不了私信,呵呵~ 
    不是很清楚CCustomDraw和COwnerDraw到底有什么不同,在开发过程中自定义控件,特别是要重绘的话,两者之间的区别和联系?
      

  9.   

    发不了私信,呵呵~ 
    不是很清楚CCustomDraw和COwnerDraw到底有什么不同,在开发过程中自定义控件,特别是要重绘的话,两者之间的区别和联系?
    http://hi.baidu.com/sumos/item/e3ae61e664713f3c4cdcaf0f
    我之前自绘ListViewCtrl的代码,不太全,你可以参考一下
      

  10.   

    感觉不用写很多代码了。DWORD CListViewCtrlEx::OnItemPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW lpNMCustomDraw)
    {
        NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( lpNMCustomDraw );
        伪代码:if(pLVCD->nIndex==12)
                 pLVCD->clrText = RGB(128, 128, 128);
        
        return CDRF_DODEFAULT;    //这里面不是很会写了
        可能是CDRF_NEWFONT,这里你查下MSDN
    }