RGB取反,渐变色计算

//颜色值单通道取反
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风格自绘

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值