如何使CListCtrl控件中的不同行显示不同的颜色?

解决方案 »

  1.   

    自画CListCtrl
    void CCustomDrawDlg::OnCustomDrawList(NMHDR* pNMHDR,LRESULT* pResult)
    {
    //处理NM_CUSTOMDRAW消息
    LPNMLVCUSTOMDRAW pDraw=(LPNMLVCUSTOMDRAW)pNMHDR;
    //为所有的绘图阶段申请通知
    *pResult=CDRF_NOTIFYITEMDRAW|CDRF_NOTIFYPOSTPAINT|CDRF_NOTIFYPOSTERASE;
    //决定绘图阶段
    DWORD dwDrawStage=pDraw->nmcd.dwDrawStage;
    if(dwDrawStage&CDDS_ITEM)
    {
    //绘图阶段适用于特定的项目,则前景色和背景色换成该项目的CHotel所指定的颜色
    CHotel* pHotel=(CHotel*)pDraw->nmcd.lItemlParam;
    switch(pHotel->m_nColorOpt)
    {
    case 0:
    pDraw->clrTextBk=RGB(255,0,0);
    pDraw->clrText=RGB(0,0,0);
    break; case 1:
    pDraw->clrTextBk=RGB(0,255,0);
    pDraw->clrText=RGB(0,0,0);
    break; case 2:
    pDraw->clrTextBk=RGB(0,0,255);
    pDraw->clrText=RGB(255,255,255);
    break;
    } if((dwDrawStage&CDDS_SUBITEM)&&(pDraw->iSubItem==0))//画每行的第一个项目,用斜体字
    {
    SelectObject(pDraw->nmcd.hdc,(HFONT)m_hItalicFont.m_hObject);
    *pResult|=CDRF_NEWFONT;
    }
    else if((dwDrawStage&CDDS_SUBITEM)&&(pDraw->iSubItem==1||pDraw->iSubItem==2))//普通字体
    {
    SelectObject(pDraw->nmcd.hdc,(HFONT)m_hStdFont.m_hObject);
    *pResult|=CDRF_NEWFONT;
    }
    }
    }
    上面程序的功能是按照m_nColorOpt的选项分别为每行选择红、绿、蓝