自绘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)的主要内容,如果未能解决你的问题,请参考以下文章
MFC中的列表控件,当选择了多项时,如何对选中的数据进行操作?
ClistCtrl用法及总结(由怎样隐藏ListCtrl列表头的排序小三角形这个bug学习到的知识)