//颜色值单通道取反
int ReverseValue(int c)
{
int cc = 255 - c;
if(cc>64 && cc<128)
cc-=64;
else if(cc>=128 && cc<192)
cc+=64;
return cc;
}
//计算渐变 一次变一通道
COLORREF ResetColor1(int &iType,int &m_R,int &m_G,int &m_B,int dtRGB)
{
switch(iType)
{
case 0:
m_R+=dtRGB;
if(m_R>=255){ iType=1; m_R=255; };
break;
case 1:
m_G+=dtRGB;
if(m_G>=255){ iType=2; m_G=255;};
break;
case 2:
m_B+=dtRGB;
if(m_B>=255){ iType=3; m_B=255;};
break;
case 3:
m_R-=dtRGB;
if(m_R<=0){ iType=4; m_R=0;};
break;
case 4:
m_G-=dtRGB;
if(m_G<=0){ iType=5; m_G=0;};
break;
case 5:
m_B-=dtRGB;
if(m_B<=0){ iType=0; m_B=0;};
break;
default:
break;
}
COLORREF clo=RGB(m_R,m_G,m_B);
return clo;
}
//计算渐变 一次变三通道
COLORREF ResetColor2(BOOL &mbr,BOOL &mbg,BOOL &mbb,int &m_R,int &m_G,int &m_B,int dtRGB)
{
if(mbr){m_R+=dtRGB;}else{m_R-=dtRGB;}
if(mbg){m_G+=dtRGB;}else{m_G-=dtRGB;}
if(mbb){m_B+=dtRGB;}else{m_B-=dtRGB;}
if(m_R<=0){mbr=TRUE;m_R=0;}; if(m_R>=255){mbr=FALSE;m_R=255;};
if(m_G<=0){mbg=TRUE;m_G=0;}; if(m_G>=255){mbg=FALSE;m_G=255;};
if(m_B<=0){mbb=TRUE;m_B=0;}; if(m_B>=255){mbb=FALSE;m_B=255;};
COLORREF clo=RGB(m_R,m_G,m_B);
return clo;
}
使用:
void createList()
{
CRect rcClient;
GetClientRect(&rcClient);
m_ListCtrl.Create( LVS_REPORT|LVS_OWNERDRAWFIXED |WS_CHILD|WS_VISIBLE|LBS_NOTIFY|LBS_NOINTEGRALHEIGHT&~WS_BORDER , rcClient, this, IDC_LIST_FIRST);
//m_ListCtrl.SetColColor(0,RGB(10,150,20)); //设置列背景色
//m_ListCtrl.SetColColor(2,RGB(30,100,90)); //设置列背景色
//m_ListCtrl.SetColColor(4,RGB(150,160,30)); //设置列背景色
//m_ListCtrl.SetBkColor(RGB(50,10,10)); //设置背景色
// m_ListCtrl.SetItemColor(1,1,RGB(100,100,10)); //设置指定单元背景色
m_ListCtrl.SetRowHeight(15); //设置行高度
m_ListCtrl.SetHeaderHeight(1.5); //设置头部高度
m_ListCtrl.SetHeaderFontHW(18,0); //设置头部字体高度,和宽度,0表示缺省,自适应
m_ListCtrl.SetHeaderTextColor(RGB(255,200,100)); //设置头部字体颜色
m_ListCtrl.SetHeaderBKColor(100,255,100,8); //设置头部背景色
m_ListCtrl.SetFontHW(15,0); //设置字体高度,和宽度,0表示缺省宽度
// m_ListCtrl.SetColTextColor(2,RGB(255,255,100)); //设置列文本颜色
// m_ListCtrl.SetItemTextColor(3,1,RGB(255,0,0)); //设置单元格字体颜色
m_ListCtrl.InsertColumn(0,_T("测试1"),LVCFMT_CENTER,255);
m_ListCtrl.InsertColumn(1,_T(" "),LVCFMT_CENTER,55);
m_ListCtrl.InsertColumn(2,_T("测试2"),LVCFMT_CENTER,255);
int _R1,_G1,_B1,_R2,_G2,_B2;
BOOL br=FALSE,bg=FALSE,bb=FALSE;
int iB=0;
int dt=20;
_R1=_R2=100;
_G1=_R2=255;
_B1=_R2=255;
for(int k=0;k<100;k++)
{
int n=0;
CString str;
str.Format(_T("%04d"),k+1);
m_ListCtrl.InsertItem(k,str);
m_ListCtrl.SetItemText(k,1,_T(" "));
m_ListCtrl.SetItemText(k,2,_T("张三")+str);
COLORREF col1=ResetColor1(iB,_R1,_G1,_B1,dt);
COLORREF col2=ResetColor2(br,bg,bb,_R2,_G2,_B2,dt);
m_ListCtrl.SetItemColor(0,k,col1); //设置指定单元背景色
m_ListCtrl.SetItemColor(2,k,col2); //设置指定单元背景色
COLORREF colText1=RGB(ReverseValue(_R1),ReverseValue(_G1),ReverseValue(_B1));
COLORREF colText2=RGB(ReverseValue(_R2),ReverseValue(_G2),ReverseValue(_B2));
m_ListCtrl.SetItemTextColor(0,k,colText1); //设置文本颜色
m_ListCtrl.SetItemTextColor(2,k,colText2); //设置文本颜色
}
SetWindowLong(m_ListCtrl.m_hWnd ,GWL_EXSTYLE,WS_EX_CLIENTEDGE);
m_ListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES); //设置扩展风格为网格
}
效果
本demo使用了ClistCtrl自绘
链接改变 自绘 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景及其动态创建中的问题_曲终人散121的博客-CSDN博客_clistctrl的report风格自绘