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);
}
显示效果如下图所示: