我想改变列表控件的colomn和滚动条的颜色啊,
找了许久好像没有找到啊

解决方案 »

  1.   

    void CTestDlg::OnCustomDrawList1(NMHDR* pNMHDR, LRESULT* pResult)
    {
    NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
    *pResult = CDRF_DODEFAULT;
    if (pLVCD->nmcd.dwDrawStage == CDDS_PREPAINT)
    {
    *pResult = CDRF_NOTIFYITEMDRAW;
    }
    else if (pLVCD->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
    {
    // This is the notification message for an item.  We'll request
    // notifications before each subitem's prepaint stage. *pResult = CDRF_NOTIFYSUBITEMDRAW;
    }
    else if (pLVCD->nmcd.dwDrawStage == (CDDS_ITEMPREPAINT | CDDS_SUBITEM))
    {
    int nItem = static_cast<int> (pLVCD->nmcd.dwItemSpec);
    int nSubItem = pLVCD->iSubItem;
    POSITION npos = m_msglist1.GetFirstSelectedItemPosition();
    if(nItem != m_msglist1.GetNextSelectedItem(npos)) //如果被选中使用默认输出
    { //所画项不是选中项
    CDC* pDC = CDC::FromHandle(pLVCD->nmcd.hdc);
    CString str;
    CRect rect;
    UINT nFormat = DT_VCENTER | DT_SINGLELINE;
    m_msglist1.GetSubItemRect(nItem, nSubItem, LVIR_BOUNDS, rect);
    rect.left += 3; //调整自绘输出位置
    str = m_msglist1.GetItemText(nItem,nSubItem);
    //根据用户数据判断显示何种颜色
    /* if(m_msglist1.GetItemData(nItem) ==1)
    {
    pDC->FillSolidRect(&rect, RGB(255,0,0));
    pDC->SetTextColor(RGB(0,0,255));
    pDC->SetBkColor(RGB(255,0,0));
    }
    else if(m_msglist1.GetItemData(nItem) ==2)
    {
    pDC->FillSolidRect(&rect, RGB(0,255,0));
    pDC->SetTextColor(RGB(255,0,255));
    pDC->SetBkColor(RGB(0,255,0));
    }
    else if(m_msglist1.GetItemData(nItem) ==3)
    {
    pDC->FillSolidRect(&rect, RGB(255,0,255));
    pDC->SetTextColor(RGB(0,255,255));
    pDC->SetBkColor(RGB(255,0,255));
    }
    else if(m_msglist1.GetItemData(nItem) ==4)
    {
    pDC->FillSolidRect(&rect, RGB(255,255,88));
    pDC->SetTextColor(RGB(88,88,88));
    pDC->SetBkColor(RGB(255,255,88));
    }
    */// else
    {
    *pResult = CDRF_DODEFAULT;
    return;
    }// CSize msize;
    // msize = pDC->GetTextExtent(str);
    // pDC->DrawText(str, &rect, nFormat); //自绘输出
    // *pResult = CDRF_SKIPDEFAULT; // We've painted everything.
    }
    else
    *pResult = CDRF_DODEFAULT;
    }
    }
      

  2.   

    怎样用的啊,是定义ListCtrl的哪条消息啊
      

  3.   

    要不要对该ListCtrl设置OwnDraw属性
      

  4.   

    ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST_ID, OnCustomDrawList)
      

  5.   

    怎么没有效果啊,OnCustomDrawList可以进去,但没有效果啊

    if (pLVCD->nmcd.dwDrawStage == CDDS_PREPAINT)
    {
    *pResult = CDRF_NOTIFYITEMDRAW;
    }
    退出了
      

  6.   


    你试试:void OnCustomDrawList(NMHDR *pNMHDR, LRESULT *pResult)
    {
    NMLVCUSTOMDRAW *pLVCD = reinterpret_cast<NMLVCUSTOMDRAW *>(pNMHDR); switch(pLVCD->nmcd.dwDrawStage)
    {
    case CDDS_PREPAINT:
    *pResult = CDRF_NOTIFYITEMDRAW;
    break;
    case CDDS_ITEMPREPAINT:
    COLORREF clrBkgnd;
    if(pLVCD->nmcd.dwItemSpec %2)
    clrBkgnd = RGB(255, 255, 255);
    else
    clrBkgnd = RGB(220, 220, 220);
    pLVCD->clrTextBk = clrBkgnd;
    *pResult = CDRF_DODEFAULT;
    break;
    default:
    *pResult = CDRF_DODEFAULT;
    }
    }
      

  7.   

    你的代码是改变listCtrl每一项的颜色,我是要改变listctrl的滚动条和column的颜色啊