如题,已经问了好几次了,都没有获得理想的答案,希望这次可以有收获啊,求高手指点MFCListCtrl

解决方案 »

  1.   

    没有这个高亮颜色的接口
    可以用custom draw实现,稍微有点麻烦,需要是单选模式,paint的时候临时取消select状态,设置个背景色作为自定义的高亮色,绘制完再恢复select状态从CListCtrl派生一个类,添加消息反射
    BEGIN_MESSAGE_MAP(CMyListVCtrl, CListCtrl)
    ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, &CMyListVCtrl::OnNMCustomdraw)
    END_MESSAGE_MAP()// CMyListVCtrl message handlersvoid CMyListVCtrl::PreSubclassWindow()
    {
    ModifyStyle(LVS_SHOWSELALWAYS, LVS_SINGLESEL); // TRICKY!!! can`t with LVS_SHOWSELALWAYS
    SetExtendedStyle(GetExtendedStyle()|LVS_EX_FULLROWSELECT); CListCtrl::PreSubclassWindow();
    }void CMyListVCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
    {
    static BOOL s_bThisItemSelect = FALSE; NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);
    *pResult = CDRF_DODEFAULT; switch (pLVCD->nmcd.dwDrawStage)
    {
    case CDDS_PREPAINT:
    *pResult = CDRF_NOTIFYITEMDRAW;
    break; case CDDS_ITEMPREPAINT:
    {
    UINT ordin = pLVCD->nmcd.lItemlParam; s_bThisItemSelect = FALSE;
    if (pLVCD->nmcd.uItemState & CDIS_SELECTED) {
    s_bThisItemSelect = TRUE;
    SetItemState(pLVCD->nmcd.dwItemSpec, 0, LVIS_SELECTED); pLVCD->clrText = RGB(255,255,255); // your custom color
    pLVCD->clrTextBk = RGB(0,128,0);
    }
    *pResult = CDRF_NOTIFYPOSTPAINT;
    }
    break; case CDDS_ITEMPOSTPAINT:
    if (s_bThisItemSelect)
    SetItemState(pLVCD->nmcd.dwItemSpec, 0xFF, LVIS_SELECTED);
    break;
    }
    }