首页
社区
课程
招聘
[原创]一个副产品:水晶进度条
发表于: 2007-7-16 10:11 10092

[原创]一个副产品:水晶进度条

2007-7-16 10:11
10092

曾经想开发一个skin程序,居然拖延到现在没成功.平时在学校里也没有购置电脑,没有将该试验继续.
这个暑假刚回家,要在一个窗体上安置进度条,发现windows里comctl的进度条丑陋不堪,于是引用了以前开发一半的skin的代码,制作了一个"所谓"的"水晶进度条".

基本原理是RegisterClassEx()注册了一个窗体类,在wm_paint中施展一点雕虫小技,然后用窗体消息控制它,用控件窗体的标题来记录进度和配置. 为了使用方便,也便于其他语言的调用,把控制消息封装成函数.

网上注意观察了一下,大部分网上流传的水晶控件画法都是两个圆边矩形互相嵌套,如下:
(可能不能对齐,为了节省论坛空间就不贴图片了,只画个示意图,复制到记事本里能对齐的 )
  _________________________________
/  _____________________________  \
/ /                              \  \
| |                              |  |
| \______________________________/  |
|                                   |
|                                   |
\                                   /
\_________________________________/

由于我的美术功底.....( 汗...),所以最终只采用简单的渐变.

昨天,母亲为家里购置了新电脑.是PentiumCore2140,1G,GF7300正版vista prenium.惊奇的发现vista的taskbar居然使用的也是类似简单渐变(至少看上去像 ) 支持MS!

测试时发现一个问题,在一台旧的计算机上(Pentium3-667MHz,TNT2-16M)当刷新比较快时有时会露底(画面闪烁,有时闪出背景色又立即正常) :( (现在想了一下,如果被覆盖的那块背景不画,可能这个问题就解决了,新装好的系统,没有vc++,没法尝试)

这种"露底"只发生在一些性能不济的计算机上,虽未尝试在P4或PD的计算机上运行,但于这台CoreE2140上绝对不会出现"露底".相信在各位前辈的计算机上也应该不会,毕竟当前PIII<1G的计算机不多见了.该bug不会成为大问题

封装的函数说明见附件中的readme.
原始消息#define在.h中,都可以望文生义,lParam作为所需的参数,未列入readme中,相信在简洁的代码里能快速找到这些消息的简单实现

感谢各位浏览捧场,代码与DEMO附于附件中

////////////////////////////////////////////////////////////////////////////////

今天按照设想,限制了绘画的区域,果然没有再出现闪烁的情况,并美化了背景区,更新于附件中


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (15)
雪    币: 262
活跃值: (56)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
2
呵呵,谢谢分享
2007-7-16 12:36
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
3
支持: ) !
2007-7-16 13:14
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
4
呀哈,``看到题目,第一感觉是"水产品"哈哈哈`
这东西不错,不过饿不太常用进度条`!!~
支持哈`
2007-7-16 14:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
好一个"水产品"~~~我晕啊。.不过还是支持``
2007-7-16 15:38
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
6
推荐楼主做成OCX:)
这样子 VB调用会稍微方便点
2007-7-16 21:23
0
雪    币: 214
活跃值: (11)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
嘻嘻,感谢支持
也想过做成OCX,由于进度条的确不常用,用过一次后也偷懒于再改进了.

呵呵,水产品能让人在夏日感到清凉些
2007-7-17 10:58
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
会出现闪烁的现象,整个过程出现2-3次闪烁的现象。
2007-7-18 18:50
0
雪    币: 214
活跃值: (11)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
已经将闪烁情况“完全”修正了。更新附件于上
2007-7-18 22:24
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
支持原创:)

绘制渐变矩形微软提供了一个函数GradientRectangle,远比自己设定n个Brush效率高.
2007-7-19 08:54
0
雪    币: 1925
活跃值: (906)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
11
谢谢分享~~~
2007-7-19 10:52
0
雪    币: 214
活跃值: (11)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
.........
楼上说的 GradientRectangle 不是 gdi 的 api 吗?
为什么查不到....5555
2007-7-19 11:37
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
闪烁问题解决,支持
2007-7-19 18:44
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
记错,函数名是叫GradientFill(...),楼主搜一下:)

函数原型 WINGDIAPI BOOL  WINAPI GradientFill(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG);
2007-7-20 17:23
0
雪    币: 88
活跃值: (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
支持,谢谢                     
下载来看看.
2007-7-21 00:32
0
雪    币: 211
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
谢谢~~~学习下。
2007-7-21 08:08
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码