duilib中增加文本滚动展示控件(跑马灯)

对于比较长的文本,滚动展示是一个常用的方法。

最近需要用到文本滚动展示,网上找了一下,csdn里面提到的有,但是已经收费了,所以干脆自己实现一个。

对于duilib来讲,滚动展示通常有两种实现思路:1.容器(HorizontalLayout或者VerticalLayout)内放Label,通过定时器去移动label的位置来实现。2.自己派生新控件,在新控件里面起定时器,然后在painttext里面去自绘。

对于文本滚动控件比较少的界面,第一种完全可以满足,也无需派生新控件,更为简单。对于可能有比较多的文本滚动控件需求的界面(比如列表或者九宫格布局之类的子控件),第一种管理起来稍有不便,不如直接派生新控件,每个控件自己管理自己的滚动。

这里给出第二种实现的大致思路以及源码:

1.从label派生,增加设置步进间隔,步进像素,步进方向的属性和方法。

2.增加构建文本位图的方法,将所需文本根据控件宽高,textpadding,多行,字号等属性,预先绘制成一个位图,选入到兼容DC里面。

3.重载painttext函数,当需要painttext时,将文本位图的指定区域alphablend到窗口DC的指定区域,每次计算好这个区域,以此来实现滚动展示的效果。

4.根据需要,在settext等方法中启动定时器以便于触发滚动刷新。

具体实现代码在https://github.com/juhuaguai/duilib/blob/master/DuiLib/Control/UIScrollLabel.cpp ,这里的CScrollLabelUI控件就是文本滚动展示控件,设置滚动间隔,每次滚动像素,滚动方向(横向滚动(根据步进值支持向左或向右设置),垂直滚动(根据步进值支持向上或向下设置))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值