首页 > 代码库 > VC 自绘CListCtrl类
VC 自绘CListCtrl类
http://www.codeproject.com/listctrl/quicklist.asp
http://www.codeproject.com/listctrl/ctooltiplistctrl.asp
实现功能:鼠标在ListCtrl上滑动的时候,滑动到哪一行哪一行就高亮,有且仅有一条是高亮的。
如何实现下面两个功能:
1.当鼠标离开ListCtrl的时候,高亮行取消高亮。
2.更改高亮行的背景色,默认是蓝色的,客户想要其它的颜色。
//自绘CListCtrl类,重载虚函数DrawItem void CNewListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { // TODO: Add your code to draw the specified item ASSERT(lpDrawItemStruct->CtlType == ODT_LISTVIEW); CDC dc; dc.Attach(lpDrawItemStruct->hDC); ASSERT(NULL != dc.GetSafeHdc()); // Save these value to restore them when done drawing. COLORREF crOldTextColor = dc.GetTextColor(); COLORREF crOldBkColor = dc.GetBkColor(); // If this item is selected, set the background color // and the text color to appropriate values. Also, erase // rect by filling it with the background color. if ((lpDrawItemStruct->itemAction | ODA_SELECT) && (lpDrawItemStruct->itemState & ODS_SELECTED)) { dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT)); dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT)); dc.FillSolidRect(&lpDrawItemStruct->rcItem, ::GetSysColor(COLOR_HIGHLIGHT)); } else { if(lpDrawItemStruct->itemID%2) dc.FillSolidRect(&lpDrawItemStruct->rcItem, RGB(128,128,128)); else dc.FillSolidRect(&lpDrawItemStruct->rcItem, RGB(255,128,255)); } // If this item has the focus, draw a red frame around the // item's rect. if ((lpDrawItemStruct->itemAction | ODA_FOCUS) && (lpDrawItemStruct->itemState & ODS_FOCUS)) { CBrush br(RGB(0, 0, 128)); dc.FrameRect(&lpDrawItemStruct->rcItem, &br); } // Draw the text. CString strText(_T("")); CRect rcItem; for(int i=0; i<GetHeaderCtrl()->GetItemCount(); i++) { strText = GetItemText(lpDrawItemStruct->itemID, i); GetSubItemRect(lpDrawItemStruct->itemID, i, LVIR_LABEL, rcItem); rcItem.left += 5; dc.DrawText( strText, strText.GetLength(), &rcItem, DT_LEFT|DT_SINGLELINE|DT_VCENTER); } // Reset the background color and the text color back to their // original values. dc.SetTextColor(crOldTextColor); dc.SetBkColor(crOldBkColor); dc.Detach(); } // 调用 CNewListCtrl m_list; // 类的成员变量 #define IDC_LIST 0x1101 m_list.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|WS_VSCROLL|WS_HSCROLL|LVS_OWNERDRAWFIXED, CRect(0, 0, 280, 280), this, IDC_LIST); m_list.ModifyStyle(0, LVS_REPORT|LVS_SINGLESEL); m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); m_list.InsertColumn(0, _T("AAA"), LVCFMT_LEFT, 100); m_list.InsertColumn(1, _T("BBB"), LVCFMT_LEFT, 100); CString strText(_T("")); for(int i=0; i<20; i++) { m_list.InsertItem(i, _T("")); strText.Format(_T("%d - Hello, World!"), i+1); m_list.SetItemText(i, 0, strText); strText.Format(_T("%d - ABCDEFG"), i+1); m_list.SetItemText(i, 1, strText); }
显示效果如下图所示:
VC 自绘CListCtrl类
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。