Windows Mobile 滚动字幕的笨方法实现
2010-08-22 13:13:00 来源:WEB开发网在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 //重绘picturebox19 picBox.Invalidate();20 timerScrollMsg.Enabled = true; //重新启动定时器
注意:定时计算字幕的左边距是关键。
其实个人感觉,这个方法很笨,虽然貌似实现了功能,但弄一个定时器不停地跑,总是担心很浪费。
谁有好的办法,说一下,大家学习学习。
更多精彩
赞助商链接