設定列表控制元件(ListCtrl)各種顏色
原始碼下載:ListCtrlColor.Zip
公開介面:
//設定奇數行背景顏色
void SetOddItemBkColor(COLORREF color,BOOL bDraw);
//設定偶數行背景顏色
void SetEvenItemBkColor(COLORREF color,BOOL bDraw);
//設定熱點行背景顏色
void SetHoverItemBkColor(COLORREF color,BOOL bDraw);
//設定選中行背景顏色
void SetSelectItemBkColor(COLORREF color,BOOL bDraw);
//設定奇數行文字顏色
void SetOddItemTextColor(COLORREF color,BOOL bDraw);
//設定偶數行文字顏色
void SetEvenItemTextColor(COLORREF color,BOOL bDraw);
//設定熱點行文字顏色
void SetHoverItemTextColor(COLORREF color,BOOL bDraw);
//設定選中行文字顏色
void SetSelectItemTextColor(COLORREF color,BOOL bDraw);
實現原始碼:
// MyListCtrl.cpp : 實現檔案
IMPLEMENT_DYNAMIC(CMyListCtrl, CListCtrl)
CMyListCtrl::CMyListCtrl()
{
m_OddItemBkColor=0xFEF1E3;//奇數行背景顏色
m_EvenItemBkColor=0xFFFFFF;//偶數行背景顏色
m_HoverItemBkColor=0xFF;//熱點行背景顏色
m_SelectItemBkColor=GetSysColor(COLOR_HIGHLIGHT);//選中行背景顏色
m_OddItemTextColor=GetSysColor(COLOR_BTNTEXT);//奇數行文字顏色
m_EvenItemTextColor=GetSysColor(COLOR_BTNTEXT);//偶數行文字顏色
m_HoverItemTextColor=GetSysColor(COLOR_HIGHLIGHTTEXT);//熱點行文字顏色
m_SelectItemTextColor=GetSysColor(COLOR_BTNTEXT);//選中行文字顏色
m_nHoverIndex=-1;
m_bTracking=FALSE;
}
CMyListCtrl::~CMyListCtrl()
{
}
BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
ON_WM_MOUSEMOVE()
ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, &CMyListCtrl::OnNMCustomdraw)
END_MESSAGE_MAP()
// CMyListCtrl 訊息處理程式
void CMyListCtrl::SetOddItemBkColor(COLORREF color,BOOL bDraw)//設定奇數行背景顏色
{
m_OddItemBkColor=color;
if(bDraw)InvalidateRect(NULL);
}
void CMyListCtrl::SetEvenItemBkColor(COLORREF color,BOOL bDraw)//設定偶數行背景顏色
{
m_EvenItemBkColor=color;
if(bDraw)InvalidateRect(NULL);
}
void CMyListCtrl::SetHoverItemBkColor(COLORREF color,BOOL bDraw)//設定熱點行背景顏色
{
m_HoverItemBkColor=color;
if(bDraw)InvalidateRect(NULL);
}
void CMyListCtrl::SetSelectItemBkColor(COLORREF color,BOOL bDraw)//設定選中行背景顏色
{
m_SelectItemBkColor=color;
if(bDraw)InvalidateRect(NULL);
}
void CMyListCtrl::SetOddItemTextColor(COLORREF color,BOOL bDraw)//設定奇數行文字顏色
{
m_OddItemTextColor=color;
if(bDraw)InvalidateRect(NULL);
}
void CMyListCtrl::SetEvenItemTextColor(COLORREF color,BOOL bDraw)//設定偶數行文字顏色
{
m_EvenItemTextColor=color;
if(bDraw)InvalidateRect(NULL);
}
void CMyListCtrl::SetHoverItemTextColor(COLORREF color,BOOL bDraw)//設定熱點行文字顏色
{
m_HoverItemTextColor=color;
if(bDraw)InvalidateRect(NULL);
}
void CMyListCtrl::SetSelectItemTextColor(COLORREF color,BOOL bDraw)//設定選中行文字顏色
{
m_SelectItemTextColor=color;
if(bDraw)InvalidateRect(NULL);
}
void CMyListCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
int nIndex=HitTest(point);
if(nIndex!=m_nHoverIndex){
int nOldIndex=m_nHoverIndex;
m_nHoverIndex=nIndex;
CRect rc;
if(nOldIndex!=-1){
GetItemRect(nOldIndex,&rc,LVIR_BOUNDS);
InvalidateRect(&rc);
}
if(m_nHoverIndex!=-1){
GetItemRect(m_nHoverIndex,&rc,LVIR_BOUNDS);
InvalidateRect(&rc);
}
}
//=====================================================
if(!m_bTracking)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE;// | TME_HOVER;
tme.dwHoverTime = 1;
m_bTracking = _TrackMouseEvent(&tme);
}
CListCtrl::OnMouseMove(nFlags, point);
}
LRESULT CMyListCtrl::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
m_bTracking=FALSE;
if(m_nHoverIndex!=-1){
CRect rc;
GetItemRect(m_nHoverIndex,&rc,LVIR_BOUNDS);
m_nHoverIndex=-1;
InvalidateRect(&rc);
}
return 0;
}
void CMyListCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLVCUSTOMDRAW pNMCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);
*pResult = 0;
int nItemIndex=pNMCD->nmcd.dwItemSpec;
if (pNMCD->nmcd.dwDrawStage==CDDS_PREPAINT){
*pResult = CDRF_NOTIFYITEMDRAW;
}else{
if(nItemIndex==m_nHoverIndex){ //熱點行
pNMCD->clrTextBk=m_HoverItemBkColor;
pNMCD->clrText=m_HoverItemTextColor;
}else if(GetItemState(nItemIndex,LVIS_SELECTED) == LVIS_SELECTED){ //選中行
pNMCD->clrTextBk=m_SelectItemBkColor;
pNMCD->clrText=pNMCD->clrFace=m_SelectItemTextColor;
::SetTextColor(pNMCD->nmcd.hdc,m_SelectItemTextColor);
}else if(nItemIndex % 2==0){//偶數行 比如 0、2、4、6
pNMCD->clrTextBk=m_EvenItemBkColor;
pNMCD->clrText=m_EvenItemTextColor;
}else{ //奇數行 比如 1、3、5、7
pNMCD->clrTextBk=m_OddItemBkColor;
pNMCD->clrText=m_OddItemTextColor;
}
*pResult = CDRF_NEWFONT;
}
}
相關文章
- CSS設定一個文字兩種顏色CSS
- 設定toast的字型顏色和背景顏色AST
- JavaScript WebGL 設定顏色JavaScriptWeb
- AUTOCAD——設定顏色
- css 設定背景顏色CSS
- 設定Toast字型顏色AST
- ProgressBar 顏色的設定
- system命令設定顏色
- 如何設定小程式頁面各個部分的背景顏色?
- CAD如何設定顏色
- 【emWin】例程六:設定顏色
- Linux vi 顏色設定Linux
- 我的SCRT顏色設定
- 交替顏色列表實現
- UITabBarController、TabBar背景顏色設定、TabBarItem顏色處理UItabBarController
- VC 對話方塊背景顏色、控制元件顏色控制元件
- CSS設定元素的背景顏色CSS
- markdown字型顏色和背景設定
- CSS 設定字型顏色和大小CSS
- qt 設定選單欄顏色QT
- jQuery設定div邊框顏色jQuery
- RGB顏色設定錯誤
- 設定placeholder的字型顏色
- svg 圖示設定背景顏色SVG
- 網頁設計的12種顏色網頁
- 如何決定介面設計中顏色
- CSS 設定文字框游標顏色CSS
- word字型顏色怎麼快速設定?
- iOS button背景顏色狀態設定iOS
- 設定placeholder字型顏色程式碼
- ALV單元格顏色設定
- 設定CCLabelTTF,選單字型顏色
- switch控制元件(變更顏色)控制元件
- 設定placeholder顏色程式碼例項
- CSS設定選中文字的顏色CSS
- 設定隨機顏色的兩個方法隨機
- IOS設定狀態列的背景顏色iOS
- 設定Tabbar和NavigationBar的顏色tabBarNavigation