自绘listCtrl控件选中该行高亮(模拟windows)

Posted ye_ming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自绘listCtrl控件选中该行高亮(模拟windows)相关的知识,希望对你有一定的参考价值。

CListCtrl的派生类CMyListCtrl的DrawItem()函数里添加代码

  CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
    if (lpDrawItemStruct->itemState && LVIS_SELECTED)
    {
        CPen PenLine(PS_SOLID, 1, RGB(0, 0, 0));
        CPen *OldPenLine = pDC->SelectObject(&PenLine);
        rcItem.right -= 2;
        rcItem.bottom -= 2;
        pDC->MoveTo(rcItem.left, rcItem.top);
        pDC->LineTo(rcItem.right, rcItem.top);
        pDC->MoveTo(rcItem.left, rcItem.top);
        pDC->LineTo(rcItem.left, rcItem.bottom);
        pDC->MoveTo(rcItem.left, rcItem.bottom);
        pDC->LineTo(rcItem.right, rcItem.bottom);
        pDC->MoveTo(rcItem.right, rcItem.top);
        pDC->LineTo(rcItem.right, rcItem.bottom);
        pDC->SelectObject(OldPenLine);
        rcItem.DeflateRect(2, 2, 2, 2);
        COLORREF m_color = RGB(71, 173, 255);

        for (int i = rcItem.Height() / 2; i>0; i--)
        {
            CPen pen(PS_SOLID, 1, m_color);
            CPen *OldPen = pDC->SelectObject(&pen);
            pDC->MoveTo(rcItem.left, rcItem.top + i);
            pDC->LineTo(rcItem.right, rcItem.top + i);
            pDC->MoveTo(rcItem.left, rcItem.bottom - i);
            pDC->LineTo(rcItem.right, rcItem.bottom - i);
            pDC->SelectObject(OldPen);
        }
        pDC->SetTextColor(RGB(255, 255, 255));
    }
    else
    {
        pDC->SetTextColor(RGB(0, 0, 0));
        CBrush brush;
        brush.CreateSolidBrush(RGB(255, 255, 255));
        pDC->FillRect(rcItem, &brush);
    }
    CString strText = GetItemText(nRow, 0);
    CRect rcSubItem;
    GetSubItemRect(nRow, 0, LVIR_LABEL, rcSubItem);
    pDC->DrawText(strText, rcSubItem, DT_CENTER);

PenLine是在框内画线,模仿被选中的样子

图元的线型
PS_SOLID 实线
PS_DASH 虚线
PS_DOT 点线
PS_DASHDOT 点化线
PS_DASHDOTDOT 双点化线

 

以上是关于自绘listCtrl控件选中该行高亮(模拟windows)的主要内容,如果未能解决你的问题,请参考以下文章

ListCtrl控件 实现 :程序控制滚动(mfc的)

MFC中的列表控件,当选择了多项时,如何对选中的数据进行操作?

请问如何用TreeView控件导航无法让选中的节点高亮

ClistCtrl用法及总结(由怎样隐藏ListCtrl列表头的排序小三角形这个bug学习到的知识)

MFC如何让ListCtrl的CheckBox只有一个处于选中状态

C#中treeview控件中,如何使第一个节点默认选中高亮?