有没有办法把listctrl的选定项由蓝色背景改为灰色?

解决方案 »

  1.   

    自绘  CodeProject上有很多例子     
      

  2.   

    重载 DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) CDC* pDC;
    pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
            ...
            for ( int nCol=0; GetColumn(nCol, &lvc); nCol++)
           {
    CRect rcItem;   
    GetSubItemRect(lpDrawItemStruct->itemID,nCol,LVIR_LABEL,rcItem);   if ( lpDrawItemStruct->itemState & ODS_SELECTED )
    {
    pDC->FillSolidRect(&rcItem,m_selBkColor) ; //m_selBkColor你想要的颜色值
    pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT)) ; // 字体颜色也可改
    }
           }
      

  3.   

    void CxxxxDlg::OnCustDrawList(NMHDR *pNMHDR,LRESULT *pResult)
    {
    // TODO: Add your message handler code here and/or call default
    *pResult=CDRF_NOTIFYITEMDRAW ;
    //| CDRF_NOTIFYSUBITEMDRAW | CDRF_NOTIFYPOSTPAINT| CDRF_NOTIFYPOSTERASE;
    LPNMLVCUSTOMDRAW pDraw=(LPNMLVCUSTOMDRAW)pNMHDR;
    DWORD dwDrawStage=pDraw->nmcd.dwDrawStage;
    int nID=pDraw->nmcd.dwItemSpec;//
    int selID=m_List.GetNextItem(-1,LVNI_SELECTED);//选择项 int subItem=pDraw->iSubItem;
    //
    if((nID==selID) && (subItem==0))
    { // afxDump << selID << ";" << subItem <<"\n";
    CDC* pdc=CDC::FromHandle(pDraw->nmcd.hdc);
    //
    CRect rc;
    m_List.GetItemRect(selID,&rc,LVIR_LABEL);
    CString txt=m_List.GetItemText(selID,0);
    //
    CSize sz=pdc->GetOutputTextExtent(txt);
    rc.right=rc.left+sz.cx+8;
    rc.DeflateRect(1,1);
    //
    DWORD clr=GetSysColor(COLOR_GRAYTEXT);//COLOR_HIGHLIGHT);
    pdc->FillSolidRect(&rc,clr);
    //
    pdc->SetTextColor(RGB(255,255,255));//white
    pdc->SetBkColor(clr);
    //
    CFont* pfnt=pdc->GetCurrentFont();
    pdc->SelectObject(pfnt);
    //
    pdc->TextOut(rc.left,rc.top,txt);
    *pResult |= CDRF_SKIPDEFAULT;
    }
    }
      

  4.   

    int selID=m_List.GetNextItem(-1,LVNI_SELECTED);//选择项
    int subItem=pDraw->iSubItem; ...
    我是试过的。