pListCtrl->SetFocus();
pListCtrl->SetItemState(idx, LVIS_SELECTED, LVIS_SELECTED);idx 为要高亮的ITEM的索引

解决方案 »

  1.   

    重载CListCtrl::DrawItem.  选上LVS_OWNERDRAWFIXED属性
    void CListCtrlEx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
    {
        //得到dc
        LPDRAWITEMSTRUCT lpDIS = lpDrawItemStruct;
        CDC* pDC = CDC::FromHandle(lpDIS->hDC);    LVITEM lvi = {0};
        lvi.mask = LVIF_STATE;//|LVIF_IMAGE;
        lvi.stateMask = LVIS_FOCUSED | LVIS_SELECTED ;
        lvi.iItem = lpDIS->itemID;
        BOOL bGet = GetItem(&lvi);    BOOL bHighlight =((lvi.state & LVIS_DROPHILITED)||((lvi.state & LVIS_SELECTED) && 
                ((GetFocus() == this)|| (GetStyle() & LVS_SHOWSELALWAYS))));    // 画文本背景
        CRect rcBack = lpDIS->rcItem;
        pDC->SetBkMode(TRANSPARENT);
        if( bHighlight )
        {
            pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
            pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));        pDC->FillRect(rcBack, &CBrush(::GetSysColor(COLOR_HIGHLIGHT)));
        }
        else
        {
            if (lpDIS->itemID%2 ==0)
            {
                pDC->SetTextColor(0x0C0F80);
                pDC->FillRect(rcBack, &CBrush(0xEEF1E3));
            }
            else
            {
                pDC->SetTextColor(RGB(0,128,255));
                pDC->FillRect(rcBack, &CBrush(0xE3e3e3));
            }
        }    //设置字体颜色
        CString str;    //得到焦点大小
        CRect rcFocus = lpDIS->rcItem;
        rcFocus.DeflateRect(1,1,1,1);    if (lpDIS->itemAction & ODA_DRAWENTIRE)
        {
            //写文本
            CString szText;
            for (int i = 0; i < GetColumns(); i++)
            { //循环得到文本
                CRect rcItem;
                if ( !GetSubItemRect(lpDIS->itemID, i, LVIR_LABEL, rcItem ))
                continue;
                szText = GetItemText( lpDIS->itemID, i );            rcItem.left += 5; rcItem.right -= 1;
                pDC->DrawText(szText, lstrlen(szText), &rcItem, DT_CENTER|DT_VCENTER|DT_NOPREFIX|DT_SINGLELINE);
            }
        }
    }
      

  2.   

    我的应用实例是,一个listctrl,用鼠标在上边点中一行,那一行就要被删除,比如点了5行,那5行就要变得disable的状态(变灰了).所以...请继续帮忙
      

  3.   

    请教wycwhy(小笨蛋)一个问题,为什么我重载CListCtrl::DrawItem不起作用
    请看:
    http://www.csdn.net/expert/topic/628/628198.xml?temp=.4544641
    能不能给一个最简单的范例
    [email protected]
    谢了!
      

  4.   

    你必须设定 list控件的More styles 为 Owner draw fixed.
    或者调用 SetExtendedStyle(GetExtentedStyle()|******* )具体参数不记得了。
      

  5.   

    TN014: Custom Controls:
    For self-drawing list boxes and combo boxes, you must override MeasureItem and DrawItem. You must specify the OWNERDRAWVARIABLE style in the dialog template (LBS_OWNERDRAWVARIABLE and CBS_OWNERDRAWVARIABLE respectively). The OWNERDRAWFIXED style will not work with self-drawing items since the fixed item height is determined before self-drawing controls are attached to the list box. (The Win 3.1 member functions CListBox::SetItemHeight and CComboBox::SetItemHeight can be used to get around this limitation.)
      

  6.   

    pListCtrl->SetFocus();
    pListCtrl->SetItemState(idx, LVIS_SELECTED, LVIS_SELECTED);