自绘CListCtrl类,重载虚函数DrawItem
Posted 朝闻道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自绘CListCtrl类,重载虚函数DrawItem相关的知识,希望对你有一定的参考价值。
- //自绘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);
- }
显示效果如下图所示:
http://blog.csdn.net/visualeleven/article/details/5948057
以上是关于自绘CListCtrl类,重载虚函数DrawItem的主要内容,如果未能解决你的问题,请参考以下文章