/// <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 Canvas前台压缩图片并上传到服务器

    1.前台代码: <input id="fileOne" type="file" /> <input id="btnOne" ...

  2. java对像序列化

    package cn.stat.p2.demo; import java.io.FileInputStream; import java.io.FileNotFoundException; impor ...

  3. poj1127 Jack Straws(线段相交+并查集)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Jack Straws Time Limit: 1000MS   Memory L ...

  4. event对象具有的方法

    // dataTransfer,toElement,fromElement,y,x,offsetY,offsetX,webkitMovementY,webkitMovementX,relatedTar ...

  5. spark1.3.1使用基础教程

    spark可以通过交互式命令行及编程两种方式来进行调用: 前者支持scala与python 后者支持scala.python与java 本文参考https://spark.apache.org/doc ...

  6. 用jQuery的ajax请求一般处理程序返回json数据

    1.web页面代码: 注意事项: dataType类型一定要写成json. 2.一般处理程序代码: 注意事项: ContentType类型写成"application/json"或 ...

  7. mac下 配置tomcat

    第一步: 1.打开你的终端:然后输入  pico .bash_profile   回车 第二步: 2. 然后添加你tomcat放入的路径的path 编辑完后,control+x   (保存)    继 ...

  8. Spark学习笔记-三种属性配置详细说明【转】

    相关资料:Spark属性配置  http://www.cnblogs.com/chengxin1982/p/4023111.html 本文出处:转载自过往记忆(http://www.iteblog.c ...

  9. Xcode本地文件 提交svn 的明细

    XXXXX.xcscmblueprint  这个文件不用提交svn

  10. Android Studio Gradle Running报错:Failed to complete Gradle execution.

    错误信息如下图所示: 重启AndroidStudio问题解决.