我想当鼠标经过里面的项时,能改变经过项的背景色我重载了clistbox 在drawitem里面该怎么写啊?
还是只能在onmousemove里面?
谢谢!!

解决方案 »

  1.   

    DrawItem里面有一个参数是LPDRAWITEMSTRUCT lpDrawItemStruct 
    LPDRAWITEMSTRUCT 里面有相关的属性可以辅助你去修改颜色 
      

  2.   

    我知道 但 lpDrawItemStruct 里面有个action 和state 
    但该怎么组合才能是鼠标经过时的状态啊!
    试了好久都没试出来
      

  3.   

    在WM_MOUSEHOVER消息中判断当前经过哪个项
    然后做个标记
    在drawitem里按标记绘制
      

  4.   

    希望对你有点帮助
    void CListCtrlExt::DrawItem(LPDRAWITEMSTRUCT lpDIS){ int nItem=lpDIS->itemID; if(nItem == -1) return ; CRect rcCol = lpDIS->rcItem; CString sText; CDC* pDC=CDC::FromHandle(lpDIS->hDC); int nOldDCMode=pDC->SaveDC(); LVITEM item; item.iItem = nItem; item.iSubItem = 0; item.mask = LVIF_IMAGE|LVIF_STATE; item.stateMask = 0XFFFF; GetItem(&item); BOOL bSelected = item.state&LVIS_SELECTED; COLORREF color=::GetSysColor(COLOR_WINDOW); if(bSelected ) { pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT)); pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT)); color=::GetSysColor(COLOR_HIGHLIGHT); } else { pDC->SetBkColor(color); pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT)); } LV_COLUMN lvc; lvc.mask=LVCF_FMT|LVCF_WIDTH; rcCol.right = rcCol.left;  for(int nCol=0; GetColumn(nCol,&lvc); nCol++) { rcCol.left = rcCol.right;  rcCol.right = rcCol.left + GetColumnWidth(nCol); HPEN hOldPen = (HPEN)::SelectObject(lpDIS->hDC, ::CreatePen(PS_SOLID, 1, RGB(0xc0,0xc0,0xc0))); HBRUSH hOldBrush = (HBRUSH)::SelectObject(lpDIS->hDC, ::CreateSolidBrush(color)); ::Rectangle(lpDIS->hDC, rcCol.left-1, rcCol.top-1, rcCol.right, rcCol.bottom); ::DeleteObject(SelectObject(lpDIS->hDC, hOldBrush)); ::DeleteObject(SelectObject(lpDIS->hDC, hOldPen)); sText=MakeShortString(pDC,GetItemText(nItem,nCol),rcCol.Width()); pDC->DrawText(sText, -1, CRect::CRect(rcCol.left+3,rcCol.top,rcCol.right,rcCol.bottom-2), DT_LEFT); } pDC->RestoreDC(nOldDCMode); }
      

  5.   

    你有msdn没有,里面有详细的说明。
      

  6.   

    可以先用CListCtrl::HitTest()判断是在那个item上,然后DrawItem里对应的item上标记
      

  7.   

    每次当你的鼠标挪到一个item上的时候都会触发该函数的
      

  8.   

    lpDIS->rcItem就是当前鼠标在的区域