/// <summary>
/// 可显示Gif 的窗体
/// </summary>
public class WinGif : Form
{
private Image _img = null;
public Image Img
{
get { return _img; }
set { _img = value; }
} private EventHandler evtHandler = null;
public WinGif(Image img)
{
//初始化设置
evtHandler = new EventHandler(OnImageAnimate);
this.Img = img;
this.Width = _img.Width+;
this.Height = _img.Height + ; //开始动画
BeginAnimate();
} //委托所关联的方法
private void OnImageAnimate(Object sender, EventArgs e)
{
//该方法,只是使得当前控件重绘,调用OnPaint()
this.Invalidate();
}
//设置开始动画
public void BeginAnimate()
{
if (_img != null)
{
//当gif动画每隔一定时间后,都会变换一帧,那么就会触发一事件
//该方法就是将当前image每变换一帧时,都会调用当前这个委托所关联的方法
ImageAnimator.Animate(_img,evtHandler);
}
}
//关闭显示动画,该方法可以在窗口关闭或者某事件触发时,已停止渲染当前gif动画
public void StopAnimate()
{
_img = null;
ImageAnimator.StopAnimate(_img,evtHandler);
}
/// <summary>
/// 重载的当前winform 的OnPaint方法,当界面被冲重绘制时显示gif的某一帧
/// </summary>
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (_img != null)
{
//获取当前gif动画下一步要渲染的帧
UpdateImage();
//将获得的当前gif动画需要渲染的帧显示在界面的某个位置
e.Graphics.DrawImage(_img,new Rectangle(,,_img.Width,_img.Height));
}
}
//获得当前gif动画的下一步需要渲染的帧,当下一步任何对当前gif动画的操作都是对该帧进行操作
private void UpdateImage()
{
ImageAnimator.UpdateFrames(_img);
}
}

使用和结果显示:

        private void button1_Click(object sender, EventArgs e)
{ string file = Application.StartupPath + "\\2.gif";
Image img = System.Drawing.Image.FromFile(file); WinGif gif = new WinGif(img); gif.Show();
}

重写OnPaint事件对窗体重绘(显示gif动画) 实例2的更多相关文章

  1. 重写OnPaint事件对窗体重绘 实例1

    public class WindowOne:Form { public WindowOne() { InitializeCompnent(); } public void InitializeCom ...

  2. 窗体背景的绘制(Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景)

    核心思想:由于Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景.通过TImage组件也可以实现,但是重写W ...

  3. winform重绘控件边框

    首先添加一个用户控件 对于重绘边框有三个需要考虑的东西 1:是否显示边框 2:边框颜色 3:边框宽度 所以定义三个私有变量 /// <summary>/// 是否显示边框/// </ ...

  4. iOS - 布局重绘机制相关方法的研究

    iOS View布局重绘机制相关方法 布局 - (void)layoutSubviews - (void)layoutIfNeeded- (void)setNeedsLayout —————————— ...

  5. iOS 视图:重绘与UIScrollView(内容根据iOS编程编写)

    我们继续之前的 Hypnosister 应用,当用户开始触摸的时候,圆形的颜色会改变. 首先,在 JXHypnosisView 头文件中声明一个属性,用来表示圆形的颜色. #import " ...

  6. 【JS】313- 复习 回流和重绘

    点击上方"前端自习课"关注,学习起来~ 原文地址:我不是陈纪庚 segmentfault.com/a/1190000017329980 回流和重绘可以说是每一个web开发者都经常听 ...

  7. xp系统重绘边框线不显示(首次加载没有触发paint事件)

    同样是,重绘边框事件,win7系统显示正常,而xp系统却不显示,这是什么原因造成的呢? 于是,小编开始百度,不停的查找原因,通过一番查找,小编也意外的收获了一些内容: 例如:窗口的拖动,放大,缩小,等 ...

  8. 重绘Winform窗体

    本文转载自:http://www.cnblogs.com/encoding/p/5603080.html 按照惯例,先来几张样例图(注:为了展示窗口阴影效果,截图范围向外扩展了些,各位凭想象吧). 还 ...

  9. 玩转控件:重写/重绘Dev中MessageBox弹窗控件

    很久没有更新博客了,本想着直接发一篇<手撕ERP>系列,从控件重写.重绘,到框架搭建,再到部分模块实现+业务的.但是每次动手的时候,都觉得难以下手.直接从数据库设计开始吧,模块设计还没定下 ...

随机推荐

  1. HTML5框架、背景和实体、XHTML的使用规范

    HTML5框架 cols :竖排 rows:横排,frameset frame已弃用  iframe仍保留使用.用法: Target属性: HTML5实体 XHTML的使用规范

  2. Jenkins学习之——(1)Jenkins的安装与配置

    1.最近公司要求做自动化部署,于是自学了jenkins.这个参考书很少,网上的文章也讲得很模糊,于是打算把自己学习东西记下来,希望对大家有所帮助. 一.jenkins的安装 到jenkins官网(ht ...

  3. out返回值的用法与用途

    static void Main(string[] arr) { Console.WriteLine("请输入用户名"); string uname = Console.ReadL ...

  4. php echo字符串的连接格式

    echo "<td align=\"center\"><img src=\""; 1.  \"    \" 2. ...

  5. bootstrapValidator Maximum call stack size exceeded

    既然validator依赖与Bootstrap3,那么表单必须使用Bootstrap的类来编写. Tip1:如果表单不是通过Bootstrap构建(即元素包含表单项且关联的label没有form-gr ...

  6. Vim的snipMate插件

    介绍终于发现了一个插件,对于Vim下代码块的自动补全支持的很好.给大家推荐snipMate. snipMate可以帮助您在vim上实现类似Textmate的功能,自动代码块的能力非常强大,而且代码块是 ...

  7. IIC 概述之源码仿真

    7.1.1 I2C总线简介 1.I2C总线的基本结构 I2C总线由数据线SDA和时钟线SCL构成,每条线都通过上拉电阻接向正电源,所有采用I2C接口标准的器件均并行挂接在总线上,如图7-1所示. I2 ...

  8. Android之断点续传下载

    今天学习了Android开发中比较难的一个环节,就是断点续传下载,很多人看到这个标题就感觉头大,的确,如果没有良好的逻辑思维,这块的确很难搞明白.下面我就将自己学到的知识和一些见解写下供那些在这个环节 ...

  9. Visio 下载,及密钥

    Visio2010简体中文高级版(永久激活密钥:GR24B-GC2XY-KRXRG-2TRJJ-4X7DC) ed2k://|file|cn_visio_2010_x64_516562.exe|515 ...

  10. ubuntu系统修改终端提示符及设置颜色高亮

    Linux终端大家想必都清楚吧,最近在使用的时候发现在进入到某个文件夹目录比较深的层次后,终端提示的绝对路径很长,这样给人的感觉很不习惯,在这里给大家介绍下如何修改终端的提示,顺便介绍下提示符的颜色: ...