Windows Mobile 滾動字幕的笨方法實現

來源:互聯網
上載者:User

在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; //重新啟動定時器

 

 

注意:定時計算字幕的左邊距是關鍵。

其實個人感覺,這個方法很笨,雖然貌似實現了功能,但弄一個定時器不停地跑,總是擔心很浪費。

誰有好的辦法,說一下,大家學習學習。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.