找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3092|回复: 15

C++窗体渐变背景的实现方法

  [复制链接]

16

主题

433

回帖

2536

积分

高级会员

积分
2536
发表于 2018-9-26 21:11:30 | 显示全部楼层 |阅读模式
    【IT168技术文档】
这种奇特的视觉效果制作起来相当简单,只需将屏幕分成许多行,每一行显示不同的颜色就可以了。渐变图形可以有许多种形式,有圆形渐变、矩形渐变、对角渐变等多种显示效果。要显示渐变,需使用到RGB 宏,每次使颜色值的各颜色分量稍有变化,中国自学编程网,www.zxbc.cn
B:实现与应用
选择菜单 File | New Application,创建一个新的项目文件。在窗体 Form1 上放置一个 TColorDialog 控件,然后切换到Unit1.h,在 TForm1 的 private 部分加入两个变量的定义,分别用于设置起始颜色和终止颜色。
private: // User declarationsTColor 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;iPen->Color=TColor(RGB(redstart+int(redinc*i), greenstart+int(greeninc*i), bluestart+int(blueinc*i))); Canvas->MoveTo(i,0); Canvas->LineTo(i,Height); } } //---------------------------------------------------------------------------
工控课堂 www.gkket.com

0

主题

416

回帖

2475

积分

高级会员

积分
2475
发表于 2018-10-2 10:49:17 | 显示全部楼层
激动人心,无法言表!
工控课堂 www.gkket.com

0

主题

425

回帖

2449

积分

高级会员

积分
2449
发表于 2018-10-17 10:34:38 | 显示全部楼层
看了楼主的帖子,不由得精神一振,豁然开朗,牛掰
工控课堂 www.gkket.com

16

主题

433

回帖

2536

积分

高级会员

积分
2536
 楼主| 发表于 2018-11-22 05:09:35 | 显示全部楼层
我顶,我顶,我顶顶顶
工控课堂 www.gkket.com

0

主题

165

回帖

424

积分

注册会员

积分
424
发表于 2019-5-18 17:19:37 | 显示全部楼层
强烈支持楼主ing……
工控课堂 www.gkket.com
  • 打卡等级:即来则安
  • 打卡总天数:29
  • 打卡月天数:1
  • 打卡总奖励:7791
  • 最近打卡:2025-12-13 17:25:16

2540

主题

1353

回帖

2万

积分

管理员

积分
21301
发表于 2019-6-5 15:32:24 | 显示全部楼层
无回帖,不论坛,这才是人道。
工控课堂 www.gkket.com

0

主题

95

回帖

144

积分

新手上路

积分
144
发表于 2025-11-15 06:26:46 | 显示全部楼层
蹲个后续,楼主记得更新呀,在线等挺急的~
工控课堂 www.gkket.com

0

主题

73

回帖

112

积分

新手上路

积分
112
发表于 2025-11-15 06:34:20 | 显示全部楼层
救命!这波发言太秀了,直接原地封神~
疯狂认同!楼主说出了我不敢说的话
工控课堂 www.gkket.com

0

主题

111

回帖

201

积分

注册会员

积分
201
发表于 2025-11-15 06:39:16 | 显示全部楼层
评论区人才辈出,笑到停不下来😂
工控课堂 www.gkket.com

0

主题

82

回帖

123

积分

新手上路

积分
123
发表于 2025-11-15 06:42:19 | 显示全部楼层
求个链接 / 教程,楼主好人一生平安~
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-22 17:36 , Processed in 0.670398 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表