我想知道渐进色的实现算法,而不是Windows封装好的API
GradientFill,请各位赐教。
GradientFill,请各位赐教。
解决方案 »
- 见笑了,如何调用ocx中的函数
- SDI中切换窗体的函数中的疑问
- 如何解决这个重复编译的问题?
- 刚学VC,如何出现程序初始界面
- VC中的报表处理!
- 请问怎样用程序控制结束MessageBox对话框?
- 练习了一个简单的SOCKET,当有客户端连接时可以通过OnAccept得知,但客户端退出的时候如何知道?谢谢
- 对话框中字体颜色问题。有提示的给分
- 如何传递并使用自定义结构数组,谁能给我一些代码,包括客户端的,帮忙up也送分!
- 关于内存数据读取的疑惑(求解答)
- 大问题出来了,大家快来看那!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 在VC里为什么有些变量不能在watch窗口里看到它们的值
color:=i+$FFFF00;
for i:=0 to 255 do
color:=i+$FF00FF;
for i:=0 to 255 do
color:=i+$00FFFF;//or color:=i+yourdefinedcolor
void CGradientProgressCtrl::DrawGradient(CPaintDC *pDC, const RECT &rectClient, const int &nMaxWidth)
{
RECT rectFill; //显示区域
float fStep; //每一步的幅宽
CBrush brush; //显示的颜色画刷
CMemDC memDC(pDC); int r,g,b;
float rStep,gStep,bStep;
//得到不同颜色并相减,返回颜色之间的最大差值
r=(GetRValue(m_clrEnd)-GetRValue(m_clrStart));
g=(GetGValue(m_clrEnd)-GetGValue(m_clrStart));
b=(GetBValue(m_clrEnd)-GetBValue(m_clrStart));
//使进程条显示的总数 等于最大的颜色差值
int nSteps=max(abs(r),max(abs(g),abs(b)));
//确定每一颜色填充多大的矩形区域
fStep=(float)rectClient.right/(float)nSteps;
//设置每一颜色填充的步数
rStep=r/(float)nSteps;
gStep=g/(float)nSteps;
bStep=b/(float)nSteps; r=GetRValue(m_clrStart);
g=GetGValue(m_clrStart);
b=GetBValue(m_clrStart);
//绘制颜色渐变的进程条
for(int iOnBand=0;iOnBand<nSteps;iOnBand++)
{
::SetRect(&rectFill,
//以下为填充矩形区域的左上角x,y和右下角x,y
(int)(iOnBand*fStep),
0,
(int)((iOnBand+1)*fStep),
rectClient.bottom+1);
VERIFY(brush.CreateSolidBrush(RGB(r+rStep*iOnBand,g+gStep*iOnBand,b+bStep*iOnBand)));
memDC.FillRect(&rectFill,&brush);
VERIFY(brush.DeleteObject());
//在结束绘制之前,使用背景色填充乘下的的客户区域
if(rectFill.right>nMaxWidth)
{
::SetRect(&rectFill,rectFill.right,0,rectClient.right,rectClient.bottom);
VERIFY(brush.CreateSolidBrush(m_clrBkGround));
memDC.FillRect(&rectFill,&brush);
VERIFY(brush.DeleteObject());
return;
}
}
}
for i:=0 to 255 do
color:=i+$FFFF00;
for i:=0 to 255 do
color:=i*$100+$FF00FF;
for i:=0 to 255 do
color:=i*$10000+$00FFFF;//or color:=i+yourdefinedcolor
int r,g,b;[0,255]
COLORREF cf=RGB(r,g,b)