在C# WinForm 轻松实现滚动字幕特效的关于窗体

在C# WinForm 轻松实现滚动字幕特效的关于窗体
原理很简单,Timer与集合、Label配合就可以轻松实现。
截图(记得在一些共享软件注册机上也看到这样的效果):
在C# WinForm 轻松实现滚动字幕特效的关于窗体_第1张图片
看看下面的C#源码就知道了:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Drawing.Drawing2D;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Diagnostics;
  10. namespace CodingMouse.CMCSharpSDK.UI.Forms
  11. {
  12.     /// 
  13.     /// 关于本软件界面
  14.     /// 
  15.     public partial class frmAbout : Form
  16.     {
  17.         #region Private Members
  18.         Listnew List
  19.         Listnew List
  20.         int index = 0;
  21.         /// 
  22.         /// 保存窗体旧坐标的X轴值和Y轴值
  23.         /// 
  24.         int _x, _y;
  25.         /// 
  26.         /// 保存窗体是否可移动标识
  27.         /// 
  28.         bool isMove = false;
  29.         /// 
  30.         /// 保存鼠标指针指向的坐标点
  31.         /// 
  32.         Point _mouseLocation;
  33.         #endregion
  34.         #region Public Methods
  35.         /// 
  36.         /// 无参构造
  37.         /// 
  38.         public frmAbout()
  39.         {
  40.             // 构建设计器控件
  41.             InitializeComponent();
  42.             for (int i = 0; i < 13; i++)
  43.             {
  44.                 Label lbl = new Label();
  45.                 lblTxt.Add(lbl);
  46.                 lblTxt[i].Top = this.Height - 24;
  47.                 lblTxt[i].Left = 24;
  48.                 lblTxt[i].Visible = false;
  49.                 lblTxt[i].BackColor = Color.Transparent;
  50.                 lblTxt[i].ForeColor = Color.White;
  51.                 lblTxt[i].AutoSize = true;
  52.                 this.Controls.Add(lblTxt[i]);
  53.             }
  54.             lblTxt[0].Text = "产品名称: CMCSharpSDK";
  55.             lblTxt[1].Text = "产品全称: CodingMouse C# 开发工具包";
  56.             lblTxt[2].Text = "当前版本: 1.0.0.0";
  57.             lblTxt[3].Text = "";
  58.             lblTxt[4].Text = "程式设计: 邓超 (网络用名: CodingMouse)";
  59.             lblTxt[5].Text = "";
  60.             lblTxt[6].Text = "    Qicq: 454811990";
  61.             lblTxt[7].Text = "  E-mail: [email protected]";
  62.             lblTxt[8].Text = "    Blog: http://blog.csdn.net/CodingMouse";
  63.             lblTxt[9].Text = "";
  64.             lblTxt[10].Text = "测试环境: Microsoft Windows Server 2003 Enterprise Edition";
  65.             lblTxt[11].Text = "          Microsoft Visual Studio 2005 Team Suite";
  66.             lblTxt[12].Text = "          Microsoft SQL Server 2005 Enterprise Edition";
  67.             // 添加事件监听
  68.             lblTxt[7].Click += new EventHandler(frmAbout_Email_Click);
  69.             lblTxt[8].Click += new EventHandler(frmAbout_WebSite_Click);
  70.             lblTxt[7].MouseMove += new MouseEventHandler(frmAbout_Link_MouseMove);
  71.             lblTxt[8].MouseMove += new MouseEventHandler(frmAbout_Link_MouseMove);
  72.             lblTxt[7].MouseLeave += new EventHandler(frmAbout_Link_MouseLeave);
  73.             lblTxt[8].MouseLeave += new EventHandler(frmAbout_Link_MouseLeave);
  74.             lblScroll.Add(lblTxt[0]);
  75.         }
  76.         #endregion
  77.         #region Event Handlers
  78.         /// 
  79.         /// 链接标签鼠标移动事件
  80.         /// 
  81.         /// 
  82.         /// 
  83.         private void frmAbout_Link_MouseMove(object sender, MouseEventArgs e)
  84.         {
  85.             Label currentLabel = (sender as Label);
  86.             currentLabel.ForeColor = Color.Yellow;
  87.             currentLabel.Cursor = Cursors.Hand;
  88.         }
  89.         /// 
  90.         /// 链接标签鼠标移开事件
  91.         /// 
  92.         /// 
  93.         /// 
  94.         private void frmAbout_Link_MouseLeave(object sender, EventArgs e)
  95.         {
  96.             Label currentLabel = (sender as Label);
  97.             currentLabel.ForeColor = Color.White;
  98.             currentLabel.Cursor = Cursors.Default;
  99.         }
  100.         /// 
  101.         /// [E-mail]滚动标签点击事件
  102.         /// 
  103.         /// 
  104.         /// 
  105.         private void frmAbout_Email_Click(object sender, EventArgs e)
  106.         {
  107.             Process.Start("mailto:[email protected]");
  108.         }
  109.         /// 
  110.         /// [Blog]滚动标签点击事件
  111.         /// 
  112.         /// 
  113.         /// 
  114.         private void frmAbout_WebSite_Click(object sender, EventArgs e)
  115.         {
  116.             Process.Start("http://blog.csdn.net/CodingMouse");
  117.         }
  118.         /// 
  119.         /// 计时器事件(调度信息字幕显示)
  120.         /// 
  121.         /// 
  122.         /// 
  123.         private void tmrShow_Tick(object sender, EventArgs e)
  124.         {
  125.             // 控制字幕滚动
  126.             for (int i = 0; i < lblScroll.Count; i++)
  127.             {
  128.                 lblScroll[i].Visible = true;
  129.                 lblScroll[i].Top -= 1;
  130.                 if (lblScroll[i] == lblTxt[(lblTxt.Count - 1)] 
  131.                     && lblScroll[i].Top == this.Height - 84)
  132.                 {
  133.                     index = 0;
  134.                     lblScroll.Add(lblTxt[0]);
  135.                 }
  136.                 if (lblScroll[i].Top < (lblTxt.Count - 1))
  137.                 {
  138.                     lblScroll[i].Visible = false;
  139.                     lblScroll[i].Top = this.Height - (lblTxt.Count - 1) * 2;
  140.                     lblScroll.RemoveAt(i);
  141.                 }
  142.             }
  143.             if (index < (lblTxt.Count - 1))
  144.             {
  145.                 if ((lblTxt[index].Top + lblTxt[index].Height) - lblTxt[index + 1].Top 
  146.                     == -(lblTxt.Count - 1))
  147.                 {
  148.                     lblScroll.Add(lblTxt[index + 1]);
  149.                     index++;
  150.                 }
  151.             }
  152.         }
  153.         /// 
  154.         /// 窗体双击事件
  155.         /// 
  156.         /// 
  157.         /// 
  158.         private void frmAbout_DoubleClick(object sender, EventArgs e)
  159.         {
  160.             this.Close();
  161.         }
  162.         /// 
  163.         /// 鼠标指针在窗体上方并按下按键事件
  164.         /// 
  165.         /// 
  166.         /// 
  167.         private void frmAbout_MouseDown(object sender, MouseEventArgs e)
  168.         {
  169.             // 仅响应鼠标左键点击事件
  170.             if (e.Button == MouseButtons.Left)
  171.             {
  172.                 // 保存旧坐标
  173.                 this._x = e.X;
  174.                 this._y = e.Y;
  175.                 // 标识窗体可移动
  176.                 this.isMove = true;
  177.             }
  178.         }
  179.         /// 
  180.         /// 鼠标指针在窗体上方并移动鼠标指针事件
  181.         /// 
  182.         /// 
  183.         /// 
  184.         private void frmAbout_MouseMove(object sender, MouseEventArgs e)
  185.         {
  186.             // 如果可移动
  187.             if (this.isMove)
  188.             {
  189.                 // 根据旧坐标的相对偏移位置移动窗体
  190.                 // 方法一:
  191.                 // this.Left += e.X - this._x;
  192.                 // this.Top += e.Y - this._y;
  193.                 // 方法二:
  194.                 this.SetDesktopLocation(this.Left + e.X - this._x, this.Top + e.Y - this._y);
  195.             }
  196.             // 保存鼠标指针坐标点
  197.             _mouseLocation = e.Location;
  198.         }
  199.         /// 
  200.         /// 鼠标指针在窗体上方并释放按键事件
  201.         /// 
  202.         /// 
  203.         /// 
  204.         private void frmAbout_MouseUp(object sender, MouseEventArgs e)
  205.         {
  206.             // 标识窗体不可移动
  207.             this.isMove = false;
  208.         }
  209.         /// 
  210.         /// 鼠标指针在窗体上移过并保持静止状态一段时间事件
  211.         /// 
  212.         /// 
  213.         /// 
  214.         private void frmAbout_MouseHover(object sender, EventArgs e)
  215.         {
  216.             this.toolTip.ToolTipIcon = ToolTipIcon.Info;
  217.             this.toolTip.ToolTipTitle = "关闭提示";
  218.             this.toolTip.Show(
  219.                 "请双击鼠标键来关闭此窗体 ..."
  220.                 thisnew Point(_mouseLocation.X + 6, _mouseLocation.Y + 6), 
  221.                 5000);
  222.         }
  223.         #endregion
  224.     }
  225. }

                                                                                                                            2008年12月22日

                                                                                                                            By CodingMouse

你可能感兴趣的:(C#)