用C#制作飘动的窗体效果

最近翻看以前的学习C#的联系代码,无意之中发现一个很有趣的项目。是一个飘动窗体的效果,运行 程序之后,在当前屏幕上会像雪花般飘动很多自定义图标,并且它们就像雪花般轻盈地从屏幕上方飘落 到屏幕下方,直到消失。在程序运行过程中,屏幕上会维持一定数目的雪花。在系统托盘区域会有一个 图标,点击这个图标,可以退出程序。这个联系代码联系了如何使用不规则窗体和系统托盘控件。

程序中核心部分源代码:

view plaincopy to clipboardprint?

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
namespace FallingGold
{
  ///
  /// 说明:图 片轮廓类,通过这个类提供的方法得到图片的外围轮廓
  /// 作者:周公
  /// 原创 地址:http://blog.csdn.net/zhoufoxcn/archive/2008/06/06/2515753.aspx
  ///
   public class BitmapRegion
  {
    public BitmapRegion()
    { }
    public static void CreateControlRegion(Control control, Bitmap bitmap)
     {
      //如果控件或者图象为空
      if (control == null || bitmap == null)
      {
        return;
      }
       //将控件设置成图象一样的尺寸
      control.Width = bitmap.Width;
      control.Height = bitmap.Height;
      //如果处理的是一个窗体对象
      if (control is System.Windows.Forms.Form)
      {
         Form form = control as Form;//强制转换为Form实例
        //将窗体的尺寸 设置成比图片稍微大一点,这样就不用显示窗体边框
        form.Width += 15;
        form.Height += 35;
        //设置窗体无边框
         form.FormBorderStyle = FormBorderStyle.None;
        //设置窗体背景
        form.BackgroundImage = bitmap;
        //根据图片计算路径
        GraphicsPath graphicsPath = CalculateControlGraphicsPath(bitmap);
         //应用区域
        form.Region = new Region(graphicsPath);
      }
      //如果处理的是一个按钮对象
      else if (control is System.Windows.Forms.Button)
      {
        Button button = control as Button;//强制转换为Button实例
        //不显示文字
         button.Text = "";
        //当鼠标处在上方时更改光标状态
        button.Cursor = Cursors.Hand;
        //设置背景图片
         button.BackgroundImage = bitmap;
        //根据图片计算路径
        GraphicsPath graphicsPath = CalculateControlGraphicsPath(bitmap);
         //应用区域
        button.Region = new Region(graphicsPath);
      }

    }
    ///
    /// 通过逼近的方式扫描图片 的轮廓
    ///
    /// 要扫描的图片
    ///
    private static GraphicsPath CalculateControlGraphicsPath(Bitmap bitmap)
    {
       GraphicsPath graphicsPath = new GraphicsPath();
      //将图片的(0,0)处的 颜色定义为透明色
      Color transparentColor = bitmap.GetPixel(0, 0);
       //存储发现的第一个不透明的象素的列值(即x坐标),这个值将定义我们扫描不透明区域的边 缘
      int opaquePixelX = 0;
      //从纵向开始
       for (int y = 0; y < bitmap.Height; y++)
      {
         opaquePixelX = 0;
        for (int x = 0; x < bitmap.Width; x++)
         {
          if (bitmap.GetPixel(x, y) != transparentColor)
          {
            //标记不透明象素的位置
             opaquePixelX = x;
            //记录当前位置
             int nextX = x;
            for (nextX = opaquePixelX; nextX < bitmap.Width; nextX++)
            {
               if (bitmap.GetPixel(nextX, y) == transparentColor)
              {
                break;
              }
             }
            graphicsPath.AddRectangle(new Rectangle (opaquePixelX, y, nextX - opaquePixelX, 1));
            x = nextX;
          }
        }
      }
      return graphicsPath;
    }
  }
}

view plaincopy to clipboardprint?

view plaincopy to clipboardprint?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace FallingGold
{
  ///
  /// 说明:飘动的窗体
  /// 作者 :周公
  /// 原创地址: http://blog.csdn.net/zhoufoxcn/archive/2008/06/06/2515753.aspx
  ///
  public partial class GoldForm : Form
  {
    private int currentX;//图片的当前横坐 标
    private int currentY;//图片的当前纵坐标
    private int screenHeight;//屏幕高度
    private int screenWidth;//屏幕宽度
     private int counter;//图片数量
    private int increment;//移动增量
     private int interval;//移动时间间隔
    private Bitmap bmpFlake = Properties.Resources.snow;
    ///
    /// 构造函数
    ///
    /// 移动间隔
    /// 飘动窗体的横坐标
    public GoldForm(int interval, int currentX)
    {
      this.interval = interval + 10;
      this.currentX = currentX;
      InitializeComponent();
       BitmapRegion.CreateControlRegion(this, bmpFlake);
    }
    private void GoldForm_Load(object sender, EventArgs e)
    {
      //获取屏幕的 工作区域,不包括状态栏
      Rectangle rectangleWorkArea = Screen.PrimaryScreen.WorkingArea;
      screenHeight = rectangleWorkArea.Height;
      screenWidth = rectangleWorkArea.Width;
       timerMove.Interval = interval;//设置timer的间隔
      this.Left = currentX;//设置窗体的起始横坐标
      timerMove.Start();//运行timer
     }
    //timer的事件
    private void timerMove_Tick(object sender, EventArgs e)
    {
      timerMove.Stop();
      currentY += 5;
      counter++;
      Random random = new Random();
       if (counter == 15)
      {
        if ((random.Next(10) - 5) > 0)
        {
          increment = 1;
         }
        else
        {
          increment = -1;
        }
        counter = 0;
      }
       currentX += increment;
      if (currentY > screenHeight)
       {
        currentY = 0;
        currentX = random.Next (screenWidth);
        interval = random.Next(50,100);
      }
      //设置窗体位置,相当于移动窗体
      this.Location = new Point (currentX, currentY);
      timerMove.Interval = interval;
       timerMove.Start();
    }
  }
}

view plaincopy to clipboardprint?

整个程序的源代码请到http://download.csdn.net/source/484535下载。

时间: 2016-12-29

用C#制作飘动的窗体效果的相关文章

使用CSS制作文字环绕图片效果(文字内容包含&lt;li&gt;标签)

1.一般制作文字环绕图片效果. HTML结构: View Code <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>

PS结合3D max 制作三羊开泰多层立体字效果

  这篇教程是介绍利用PS结合3D max 制作三羊开泰多层立体字效果,教程制作出来的效果很不错,喜欢的朋友可以跟着教程一起来看看吧! 排好文字版,载入选区-生成路径然后文件-导出-路径到Illustrator 确定存为文字路径 继续文字生成路径,选择-修改-扩展-20像素得到新选区,选择选框工具附加框选下三字的横线位置填满整个选框,生成路径并导出-命名扩展路径保存 同样的道理导出图形路径命名为形状路径 打开3Dmax 软件,选择文件导入文件类型选择所有文件-合并对象到当前场景-单个对象-确定.

PhotoShop图层样式制作透明玻璃字体效果教程

教大家用PhotoShop制作透明玻璃字体效果,很简单的,主要就是设置图层样式,喜欢的同学可以学习一下! 效果图: 1.新建设置如下 2.选择形状工具 3.添加形状样式,设置如下     相关教程: Photoshop制作破碎裂纹的玻璃文字 PS制作质感玻璃字 PS打造蓝色质感玻璃水晶字效教程 PhotoShop制作透明玻璃质感金属文字教程   分类: PS文字教程

HTML+CSS网页制作实例:制作左上角卷角效果的网页

文章简介:HTML+CSS网页制作实例:制作左上角卷角效果的网页. 英文原文 http://designshack.net/articles/css/code-a-simple-folded-corner-effect-with-css/ 这篇文章中我们将介绍如何制做paper左上角的卷角效果. 我想让我的几句文字以一张有卷角折叠效果的纸为背景,如果直接用一张图片,很容易实现,但是这里我要用css来实现. 我的这种实现方法并不是非常具有创新意义,但是还是值得拿出来分享的,简单的来说,除了一个矩形

Photoshop制作极具冲击效果的裂纹碎块字

教程中的文字制作过程比较复杂.首先需要制作一些带有宇宙效果的背景,然后输入想要的文字,并把文字逐个切碎,再加入岩石纹理.后期添加星球及碎玻璃装饰即可. 最终效果 1.Ctrl+N新建文件,宽1400px,高1000px. 2.前景色为黑色,背景色为白色,背景层上用黑色填充(快捷键:Alt + Delete),复制背景层(快捷键Ctrl+J键). 3.选择菜单栏上的 滤镜 > 杂色 > 添加杂色.

用Photoshop制作图片卷页效果

用Photoshop制作图片卷页效果 卷页效果是我们在设计图像中常用的一种修饰效果.不少滤镜都能做到,如由AVBros.公司出品的PageCurl,或大名鼎鼎的KPT等.但如果用过你就会发现,这些滤镜作出的效果过于死板,更重要的是不够逼真,一眼就看出人工的痕迹.所以只用过一次,我就放弃了.如果你和我一样,不喜欢滤镜的固定模式,而希望用一种更灵活的方式来表现你的图像,这篇教程也许会给你一些启示. 由于我们在这篇教程中会用到很多路径的知识,所以,在开始之前,我希望你已经能够较熟练的操纵Photosh

摆脱束缚:PS制作“脱出”框架照片效果

平面设计中有种效果可以单独分类出来,叫做"脱出"."脱出"可以产生强烈的视觉效果.例如:彩色的动物从黑白照片中"爬"出来 .棒球手把球从电视中"击"出来!大家可以先设想并感受一下. 这种方法如能灵活运用则可使您的设计水平更进一步!今天本人就用Photoshop为大家制作一个实例,说明此类效果的制作方法. 先来看看完成图: 制作步骤如下: 首先用Photoshop新建1024x768大小的文件,背景白色即可.然后把所需要的素材-

JavaScript小技巧制作的跑马灯效果

javascript|技巧 以下是我们所制作的跑马灯效果的源程序 <html> <head> <script language="JavaScript"> <!-- Hide var scrtxt="这儿的讯息可以改为你要告诉别人的话 "+" 或是注意事项 ..."; var lentxt=scrtxt.length; var width=100; var pos=1-width; function sc

用Flash制作老电影播放效果

童年的记忆总是美好的,还记得小时候在操场上看露天电影的情景吗?本例中,笔者教大家如何用Flash来实现老电影播放的效果.其实制作老电影的效果,主要是抓住老电影播放时有点抖动,忽明忽暗,画面不清晰等特点进行设计的,所运用代码很少.其中_x._y属性可以让图片发生抖动,_alpha属性改变图片的透明度.效果如图1所示,以下是制作方法. 效果预览 源文件下载:点击这里下载 1.新建一个Flash文档,单击"属性"面板中的"尺寸"按钮,打开"文档属性"面