Windows Mobile 滚动字幕的笨方法实现

在WinCE上做应用,想在一个状态栏上显示消息,但状态栏的240宽不足以显示完所有的消息,消息大概有30字左右,字符数不固定,于是想,是不是可以像Web 页面上的那种跑马灯效果来实现。

翻烂了WinCE下的控件,发现WinCE根本不存在类似的控件或标签或属性,没办法,自己画吧,由于是要做类似滚动的效果,那肯定是移动字幕了,那肯定是定时重画了,也找不到好的办法,就用Timer控件吧,思路就是每过一定的时间,再重新在新位置(X方向或Y方向)画文字,这样可以做出类似滚动的效果。

既然要画,就要有画板Graphics,这个画板就从一个图像上得到吧,可以借助一个控件,比如可以承载图像的PictureBox控件。

如下图:

  

滚动字幕的背景实际上是一个Picturebox,就是在这个Picturebox上定时画字幕。

看代码:

窗体加载的时候,先要给Picturebox加载图像:

 

1 this.picBox.Image = Help.ImageFromFile(filepath);

定时器里执行:

 

1 timerScrollMsg.Enabled =false; //先关闭定时器
2   Bitmap bmp = Help.ImageFromFile(Path.Combine(Help.StartPath(), "bg.jpg")) as Bitmap;
3 //重新设置picturebox的图像
4   picBox.Image = bmp;
5 //取得画板
6 Graphics graphics = Graphics.FromImage(picBox.Image);
7 //画刷
8 Brush brush =new SolidBrush(Color.Blue);
9 //定义字体
10 Font font =new Font("宋体", 13F, FontStyle.Regular);
11 //每次重新画册字幕的位置都向左移动10个距离
12 _x = _x -10;
13 //如果字幕的最后一个字向左移动出屏幕外,说明整个字幕都向左滚动完了,接着要重新一轮的滚动,
14 //所以要重新定位字幕的第一个字的左边距为图像的宽度。
15 _x = _x + graphics.MeasureString(msg, font).Width <=0? _x = bmp.Width : _x;
16 //在指定位置画字幕
17 graphics.DrawString(msg, font, brush, _x, _y);
18 //重绘picturebox
19 picBox.Invalidate();
20 timerScrollMsg.Enabled =true; //重新启动定时器

 

 

注意:定时计算字幕的左边距是关键

其实个人感觉,这个方法很笨,虽然貌似实现了功能,但弄一个定时器不停地跑,总是担心很浪费。

谁有好的办法,说一下,大家学习学习。

posted @ 2009-12-24 23:29  solan3000  阅读(742)  评论(5编辑  收藏  举报