手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

实现窗体的渐变背景

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
A:关键所在

渐变图像是一种特别的图像,他从窗体的一端开始移动,同时颜色缓慢变化,达到窗体的另一端,但图像已变为另一种颜色。

这种奇特的视觉效果制作起来相当简单,只需将屏幕分成许多行,每一行显示不同的颜色就能够了。渐变图像能够有许多种形式,有圆形渐变、矩形渐变、对角渐变等多种显示效果。要显示渐变,需使用到RGB 宏,每次使颜色值的各颜色分量稍有变化。

B:实现和应用

选择菜单 File | New Application,创建一个新的项目文档。在窗体 Form1 上放置一个 TColorDialog 控件,然后转换到Unit1.h,在 TForm1 的 private 部分加入两个变量的定义,分别用于配置起始颜色和终止颜色。

private: // User declarations
TColor StartColor,EndColor;

然后双击窗体,创建窗体的 OnCreate 事件处理函数,在其中加入如下代码,用于让用户选择起始颜色和结束颜色。
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
if(ColorDialog1->Execute())
StartColor=ColorDialog1->Color;
if(ColorDialog1->Execute())
EndColor=ColorDialog1->Color;
}
//---------------------------------------------------------------------------
最后创建窗体 Form1 的 OnPaint 事件处理函数,在其中加入如下代码,用稍有变化的颜色值画一系列的垂直线,达到渐变的效果。
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
float pwidth;
int redstart,greenstart,bluestart,redend,greenend, blueend;
float redinc,greeninc,blueinc;
pwidth=float(Width);
redstart=GetRValue(StartColor);
greenstart=GetGValue(StartColor);
bluestart=GetBValue(StartColor);
redend=GetRValue(EndColor);
greenend=GetGValue(EndColor);
blueend=GetBValue(EndColor);
redinc=(redend-redstart)/pwidth;
greeninc=(greenend-greenstart)/pwidth;
blueinc=(blueend-bluestart)/pwidth;
for(int i=0;i<Width;i )
{
Canvas->Pen->Color=TColor(RGB(redstart int(redinc*i),
greenstart int(greeninc*i),
bluestart int(blueinc*i)));
Canvas->MoveTo(i,0);
Canvas->LineTo(i,Height);
}
}
//---------------------------------------------------------------------------
C:专家点评

程式中设渐变开始的颜色为 StartColor,结束的颜色为 EndColor。利用GetRValue、GetGValue、GetBValue 函数分别获得开始颜色的红、绿、蓝三原色分量 redstart greenstart bluestart 和结束颜色的三原色红、绿、蓝分量 redend greenend blueend。假如矩形的宽度为 pwidth 象素,则每次变化的各颜色分量值应分别为(redend-redstart)/pwidth、(greenend-greenstart)/pwidth、(blueend-bluestart)/pwidth,最后写一个循环,画一系列直线。

这里介绍的仅仅是颜色渐变的一种形式,读者完万能够参照其实现方法,改变数学运算,实现如“从上至下逐步加深”、“从左至右逐步加深”等颜色渐变形式,此外,还能够通过画一系列颜色不断变化的圆,制作圆形渐变效果。首先画一个最大的圆,然后依次画半径比前一个圆小一个象素的圆,然后依次画半径比前一个圆小一个象素的圆,同时圆的颜色也发生变化。




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS