自绘CListCtrl(II)

来源:互联网 发布:阿里云学生机续费40.8 编辑:程序博客网 时间:2024/06/07 11:37

http://www.codeproject.com/listctrl/quicklist.asp

http://www.codeproject.com/listctrl/ctooltiplistctrl.asp


实现功能:鼠标在ListCtrl上滑动的时候,滑动到哪一行哪一行就高亮,有且仅有一条是高亮的。

如何实现下面两个功能:
1.当鼠标离开ListCtrl的时候,高亮行取消高亮。
2.更改高亮行的背景色,默认是蓝色的,客户想要其它的颜色。

.h文件class CMyListCtrl : public CListCtrl{DECLARE_DYNAMIC(CMyListCtrl)public:CMyListCtrl();virtual ~CMyListCtrl();DECLARE_MESSAGE_MAP()public:virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);};

//自绘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);  }  

显示效果如下图所示:


0 0
原创粉丝点击