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风格自绘
RGB取反,渐变色计算相关推荐
- java对rgb取反_颜色取反 rgb COLORREF | 学步园
编码时遇到下面问题 背景颜色和前景颜色需要取反 COLORREF m_clr[5]; //背景颜色 m_listPD.SetItemData(nCount,m_clr[nUltraOrder]); / ...
- 向量概念,零向量,向量取反,计算向量的长度,单位向量
参考的是<游戏和图形学的3D数学入门教程>,非常不错的书,推荐阅读,老外很喜欢把一个东西解释的很详细. 1.向量概念: 具有方向和大小.没有位置观念.比如下图红圈圈中的两个向量是相同的,因 ...
- 原码、反码、补码转换和取反符号的运算规则
一.原码,反码,补码之间的转换 1. 正数 正数的原码.反码.补码相同. 以数字10为例: 10(在计算机中int类型是32位,为了简便这里以8位来进行运算) 原码=反码=补码:0000 1010 2 ...
- python 取反操作符(~)
误人子弟呀 误人子弟,看了几篇博客,真的是坑 ~ : 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 .~x 类似于 -x-1 1.计算依据: ①正数的原码.反码.补码都是一样的 ...
- C语言(算术、左移、赋值、位、sizeof计算大小、取反~、强制转换、条件)操作符..
1,算术操作符:+ - * / % float函数,浮点型,在9/2两边,显示小数任一一个数显示小数,结果都会显示4.5 int a = 9 % 2;//(取模,或者取余) printf(" ...
- python取反计算
@[TOC]python取反计算 假设是8位存储,则1的原码为0000 0001,补码为0000 0001(正数的原码.反码.补码都是本身) 按理解~1是按位取反得到1111 1110,计算机以111 ...
- matlab图像取反_matlab对图像操作函数的详解
一. 读写图像文件 1. imread imread函数用于读入各种图像文件,如:a=imread('e:\w01.tif') 注:计算机E盘上要有w01相应的.tif文件. 2. imwrite i ...
- 反码求和校验: 一个数加上自己取反得到的数正是时钟轮盘上最大那个数
反码求和校验: 反码求和的过程更简单一些,将原始信息每16bit取反,求和,结果存在检验和字段中,接收端同样对每个16bit进行二进制反码求和,接收方在计算中包含发送方存放的检验和,最终结果应该全为1 ...
- 复习一个知识点——原、反、补码以及取反操作
一.相关概念 1.1 机器数与真值 ·机器数 计算机中存储的数据都是带符号的二进制数,例如:5 → 0000 0101 , -5 → 1000 0101 此类数值称之为机器数. ·真值 为区别 ...
最新文章
- 网络存储导论第七章:重要系统灾备方法
- 二分查找算法为什么要先排序
- python多线程读取文件夹下的文件_是否可以使用python多线程从文件夹数读取文件数,并处理这些文件以获得组合结果?...
- php变量的引用与计数规则
- Document Builder: REMOVE_CC_DEFAULT_TEXTS
- html4基础,HTML 基础 4
- Django model select的各种用法详解
- 如何减小电压跟随器输出电阻_补课贴 | 关于运算放大器和比较器的异同,那些你不得不知道的小知识!...
- Android 9.0的One UI系统,三星S9/S9+更新One UI 安卓9.0已正式推送
- Windows 10 修改域用户密码
- 用计算机代码模拟基因,一种通过计算机程序模拟产生简化DNA甲基化测序数据的方法与流程...
- ubuntu20.04下内核源码下载分析
- 华为2017年营收突破6000亿;阿里巴巴全球总经理离职;亚马逊将关闭音乐存储服务丨价值早报
- 三维动画在计算机上的应用,三维动画运用领域有哪些地方?
- CYUSB3014固件部分低版本工程在Eclipse中编译得到img文件时无效的解决方案
- 爬虫学习笔记 -- 实战某电影网(lxml库版)
- Mqtt ----心跳机制 长链接 ping
- 在Windows下使用Python编程
- 完成一个STM32的USART串口通讯程序
- 海思HI35xx语音识别方案