資源簡介
一個自繪的CListCtrlEx列表控件類,可以支持:
(1)設置奇數行背景顏色(默認白色)
(2)設置偶數行背景顏色(默認白色)
(3)設置熱點行背景顏色(默認白色)
(4)設置選中行背景顏色(默認藍色)
(5)設置奇數行文本顏色(默認黑色)
(6)設置偶數行文本顏色(默認黑色)
(7)設置熱點行文本顏色(默認黑色)
(8)設置選中行文本顏色(默認黑色)
(9)點擊列表頭,對列表內的數據進行升序/降序排列
(10)雙緩沖,解決了閃爍的問題

代碼片段和文件信息
//?ListCtrlEx.cpp?:?實現文件
//
#include?“stdafx.h“
#include?“ListCtrlEx.h“
//?CListCtrlEx
IMPLEMENT_DYNAMIC(CListCtrlEx?CListCtrl)
/**
?*?構造函數
?*/
CListCtrlEx::CListCtrlEx()
{
m_hoverIndex = -1; //?當前熱點項目索引
m_mouseTrack = true; //?追蹤鼠標移動事件
m_if_hotLine = false; //?默認不開啟熱點行更換顏色
m_oddItemBkColor = 0xFFFFFF; //?奇數行背景顏色(默認白色)
m_evenItemBkColor = 0xFFFFFF; //?偶數行背景顏色(默認白色)
m_hoverItemBkColor = 0xFFFFFF; //?熱點行背景顏色(默認白色)
m_selectItemBkColor = GetSysColor(COLOR_HIGHLIGHT); //?選中行背景顏色(默認藍色)
m_oddItemTextColor = GetSysColor(COLOR_BTNTEXT); //?奇數行文本顏色(默認黑色)
m_evenItemTextColor = GetSysColor(COLOR_BTNTEXT); //?偶數行文本顏色(默認黑色)
m_hoverItemTextColor = GetSysColor(COLOR_BTNTEXT); //?熱點行文本顏色(默認黑色)
m_selectItemTextColor = GetSysColor(COLOR_BTNTEXT); //?選中行文本顏色(默認黑色)
}
/**
?*?析構函數
?*/
CListCtrlEx::~CListCtrlEx()
{
}
BEGIN_MESSAGE_MAP(CListCtrlEx?CListCtrl)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW?&CListCtrlEx::OnNMCustomdraw)
ON_WM_MOUSEMOVE()
ON_WM_MOUSELEAVE()
ON_WM_ERASEBKGND()
ON_WM_PAINT()
ON_NOTIFY_REFLECT(LVN_COLUMNCLICK?&CListCtrlEx::OnLvnColumnclick)
END_MESSAGE_MAP()
/**
?*?排序回調函數
?*/
static?int?CALLBACK?SortFunction(LPARAM?lParam1?LPARAM?lParam2?LPARAM?lParamSort)
{
CString?&lp1?=?*((CString?*)lParam1);
CString?&lp2?=?*((CString?*)lParam2);
int?&sort?=?*(int?*)lParamSort;
if?(sort?==?0)
return?lp1.CompareNoCase(lp2);
else
return?lp2.CompareNoCase(lp1);
}
/**
?*?鼠標在控件區域上移動時
?*/
void?CListCtrlEx::onmousemove(UINT?nFlags?CPoint?point)
{
if(m_if_hotLine?==?true)?{
//?獲取鼠標當前在哪一行上
int newIndex; //?當前鼠標的一行
int oldIndex; //?記錄原來的一行(也就是離開前的那一行)
newIndex?=?HitTest(point);
if(newIndex?!=?m_hoverIndex)?{
CRect?rc;
oldIndex?=?m_hoverIndex;
m_hoverIndex?=?newIndex;
//?刷新離開后的那一塊區域
if(oldIndex?!=?-1)?{
GetItemRect(oldIndex?&rc?LVIR_BOUNDS);
InvalidateRect(&rc);
}
//?刷新來到新的一塊的區域
if(m_hoverIndex?!=?-1)?{
GetItemRect(m_hoverIndex?&rc?LVIR_BOUNDS);
InvalidateRect(&rc);
}
}
//?鼠標要追蹤WM_MOUSELEAVE事件
if?(m_mouseTrack)?{
TRACKMOUSEEVENT?csTME;
csTME.cbSize?=?sizeof(csTME);
csTME.dwFlags?=?TME_LEAVE; //?指定要追蹤的事件
csTME.hwndTrack?=?m_hWnd; //?指定要追蹤的窗口?
::_TrackMouseEvent(&csTME); //?開啟Windows的WM_MOUSELEAVE事件支持
m_mouseTrack?=?false; //?若已經追蹤,則停止追蹤?
}
}
CListCtrl::onmousemove(nFlags?point);
}
/**
?*?鼠標離開控件區域時
?*/
void?CListCtrlEx::onmouseleave()
{
if(m_if_hotLine?==?true)?{
//?開始追蹤
m_mouseTrack?=?true;
if(m_hoverIndex?!=?-1)?{
CRect?rc;
GetItemRect(m_hoverIndex&rcLVIR_BOUNDS);
InvalidateRect(&rc);
m_hoverIndex?=?-1;
m_mouseTrack?=?true;
}
}
CListCtrl::onmouseleave();
}
/**
?*?擦除背景
?*/
BOOL?CListCtrlEx::OnEraseBkgnd(CDC*?pDC)
{
return?FALSE;
}
/**
?*?繪畫
?*/
void?CListCtrlEx::OnPaint()
{
CPai
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????7673??2014-05-03?20:20??ListCtrlEx\ListCtrlEx.cpp
?????文件???????1449??2014-05-03?14:04??ListCtrlEx\ListCtrlEx.h
?????目錄??????????0??2014-05-03?20:34??ListCtrlEx
-----------?---------??----------?-----??----
?????????????????9122????????????????????3
- 上一篇:仿QQ面板控件和QQ2009面板類似
- 下一篇:西華大學應用密碼學期末考試
評論
共有 條評論