让你的桌面飘满玫瑰心吧!

2011-12-27 13:12:00 作者: 所属分类:WinForm编程 阅读:542 评论:6

标签:

想让你的桌面飘满浪漫的玫瑰心吗?想给你心爱的人送份特别的礼物呢?呵呵,今天送给大家一份C#开发的WinForm程序,实现桌面飘雪效果,还有好听的背景音乐哦~~

来看看我实现的效果吧:

主要的程序代码还是很简单的,下面把主要代码分解一下:

1.满屏幕飞舞的心的绘制

Code
  1.  // 绘制满天飞舞的心。  
  2. Graphics g = e.Graphics;  
  3. g.SmoothingMode = SmoothingMode.AntiAlias;  //高速绘制,可以视硬件情况改为高质量绘图。  
  4.  
  5. foreach (SnowFlake s in SnowFlakes)  
  6. {  
  7.     g.ResetTransform();  
  8.     g.TranslateTransform(0, -16, MatrixOrder.Append); //平移  
  9.     g.ScaleTransform(s.Scale, s.Scale, MatrixOrder.Append); //缩放  
  10.     g.RotateTransform(s.Rotation, MatrixOrder.Prepend); //旋转  
  11.     g.TranslateTransform(s.X, s.Y, MatrixOrder.Append); //平移  
  12.       
  13.     g.DrawImage(Snow, 0, 0); //绘制  

 

2.创建、移动和删除玫瑰心,刷新屏幕

Code
  1. /// <summary>  
  2. /// 创建/移动和删除心,使得窗体刷新。  
  3. /// </summary>  
  4. /// <param name="sender">-</param>  
  5. /// <param name="args">-</param>  
  6. private void OnTick(object sender, EventArgs args)  
  7. {  
  8.     Tick++;  
  9.      
  10.     //衍生新的玫瑰心  
  11.     if (Tick % 3 == 0 && Random.NextDouble() < 0.70)  
  12.     {  
  13.         SnowFlake s = new SnowFlake();  
  14.         s.X = Random.Next(-50, Width + 50);  
  15.         s.Y = Random.Next(-20, -7);  
  16.         s.XVelocity = (float)(Random.NextDouble() - 0.5f) * 2f;  
  17.         s.YVelocity = (float)(Random.NextDouble() * 3) + 1f;  
  18.         s.Rotation = Random.Next(0, 359);  
  19.         s.RotVelocity = Random.Next(-3, 3) * 2;  
  20.  
  21.         if (s.RotVelocity == 0)  
  22.         {  
  23.             s.RotVelocity = 3;  
  24.         }  
  25.  
  26.         s.Scale = (float)(Random.NextDouble() / 2) + 0.75f;  
  27.         SnowFlakes.Add(s);  
  28.     }  
  29.  
  30.     //需要移除的玫瑰心。  
  31.     List<SnowFlake> del = new List<SnowFlake>();  
  32.     foreach (SnowFlake s in SnowFlakes)  
  33.     {  
  34.         s.X += s.XVelocity;  
  35.         s.Y += s.YVelocity;  
  36.         s.Rotation += s.RotVelocity;  
  37.  
  38.         s.XVelocity += ((float)Random.NextDouble() - 0.5f) * 0.7f;  
  39.         s.XVelocity = Math.Max(s.XVelocity, -2f);  
  40.         s.XVelocity = Math.Min(s.XVelocity, +2f);  
  41.  
  42.         if (s.YVelocity > Height + 10)  
  43.         {  
  44.             del.Add(s);  
  45.         }  
  46.     }  
  47.  
  48.     //删除  
  49.     foreach (SnowFlake s in del)  
  50.     {  
  51.         SnowFlakes.Remove(s);  
  52.     }  
  53.  
  54.     //刷新  
  55.     Refresh();  

 

3.背景音乐播放所用到的Win32API

Code
  1. public class APIClass  
  2. {  
  3.     [DllImport("kernel32.dll", CharSet = CharSet.Auto)]  
  4.     public static extern int GetShortPathName(  
  5.      string lpszLongPath,  
  6.      string shortFile,  
  7.      int cchBuffer  
  8.     );  
  9.  
  10.     [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]  
  11.     public static extern int mciSendString(  
  12.      string lpstrCommand,  
  13.      string lpstrReturnString,  
  14.      int uReturnLength,  
  15.      int hwndCallback  
  16.     );  

» 郑重声明:本文由IT伯伯发布,所有内容仅代表个人观点。版权归IT伯伯IT伯伯共有,欢迎转载, 但未经作者同意必须保留此段声明,并给出文章连接,否则保留追究法律责任的权利! 如果本文侵犯了您的权益,请留言。
【上一篇】
【下一篇】

目前有 6 条留言 其中:访客:4 条, 博主:2 条

  1. 新朋友 CHINA Internet Explorer Windows : 2011年12月28日11:28:15 地板 @回复 回复

    下载了,哈哈…

    • 头像 IT伯伯 CHINA Mozilla Firefox Windows : 2011年12月28日12:32:16 @回复 回复

      呵呵~~ :smile: 其实我已经知道你是谁了的呢~~丫头 :!:

  2. 沧海蝴蝶 CHINA Internet Explorer Windows : 2011年12月27日16:42:10 板凳 @回复 回复

    哈哈,这个玫瑰很特别哦,我这里也有一个,只要一点击就开始时出现玫瑰花直到屏幕被铺满 :!:

    • love CHINA Internet Explorer Windows : 2011年12月27日17:02:30 @回复 回复

      这个停止好像要自己结束进程才行的 :razz:

      • 头像 IT伯伯 CHINA Mozilla Firefox Windows : 2011年12月27日18:23:43 @回复 回复

        这个停止,只要双击下托盘图标就可以了···

  3. love CHINA Internet Explorer Windows : 2011年12月27日15:42:42 沙发 @回复 回复

    加个成品下载地址,不编程的也可以下载使用撒~~~ :smile:

给我留言


页面载入中..

展开