重写OnPaint事件对窗体重绘(显示gif动画) 实例2
/// <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的更多相关文章
- 重写OnPaint事件对窗体重绘 实例1
public class WindowOne:Form { public WindowOne() { InitializeCompnent(); } public void InitializeCom ...
- 窗体背景的绘制(Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景)
核心思想:由于Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景.通过TImage组件也可以实现,但是重写W ...
- winform重绘控件边框
首先添加一个用户控件 对于重绘边框有三个需要考虑的东西 1:是否显示边框 2:边框颜色 3:边框宽度 所以定义三个私有变量 /// <summary>/// 是否显示边框/// </ ...
- iOS - 布局重绘机制相关方法的研究
iOS View布局重绘机制相关方法 布局 - (void)layoutSubviews - (void)layoutIfNeeded- (void)setNeedsLayout —————————— ...
- iOS 视图:重绘与UIScrollView(内容根据iOS编程编写)
我们继续之前的 Hypnosister 应用,当用户开始触摸的时候,圆形的颜色会改变. 首先,在 JXHypnosisView 头文件中声明一个属性,用来表示圆形的颜色. #import " ...
- 【JS】313- 复习 回流和重绘
点击上方"前端自习课"关注,学习起来~ 原文地址:我不是陈纪庚 segmentfault.com/a/1190000017329980 回流和重绘可以说是每一个web开发者都经常听 ...
- xp系统重绘边框线不显示(首次加载没有触发paint事件)
同样是,重绘边框事件,win7系统显示正常,而xp系统却不显示,这是什么原因造成的呢? 于是,小编开始百度,不停的查找原因,通过一番查找,小编也意外的收获了一些内容: 例如:窗口的拖动,放大,缩小,等 ...
- 重绘Winform窗体
本文转载自:http://www.cnblogs.com/encoding/p/5603080.html 按照惯例,先来几张样例图(注:为了展示窗口阴影效果,截图范围向外扩展了些,各位凭想象吧). 还 ...
- 玩转控件:重写/重绘Dev中MessageBox弹窗控件
很久没有更新博客了,本想着直接发一篇<手撕ERP>系列,从控件重写.重绘,到框架搭建,再到部分模块实现+业务的.但是每次动手的时候,都觉得难以下手.直接从数据库设计开始吧,模块设计还没定下 ...
随机推荐
- 如何学习javascript?(转)
推荐几本好书: Step 1: <JavaScript DOM编程艺术> 看这本书之前,请先确认您对Javascript有个基本的了解,应该知道if else之类的语法,如果不懂,先去看看 ...
- ORA-02447: cannot defer a constraint that is not deferrable
一个constraint如果被定义成deferrable那么这个constraints可以在deferred和imediate两种状态相互转换. deferred只在transaction中有效,也就 ...
- Python一路走来 DAY15 Javascript
JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. 一 如何编写 ...
- /dev/socket/vold exploit 本地提权漏洞
EXPLOIT "0 asec create ../../../../../../../../xxxxx/xx/xx/xx 1 ext4 98235792350852308254872354 ...
- WebVR
WebVR 主要面向Web前端工程师,需要一定Javascript及three.js基础:本文主要分享内容为基于three.js开发WebVR思路及碰到的问题:有兴趣的同学,欢迎跟帖讨论. 目录:一. ...
- Spring ioc 原理
java程序员都知道:java程序中的每个业务逻辑至少需要两个或以上的对象来协作完成,通常,每个对象在使用他的合作对象时,自己均要使用像new object() 这样的语法来完成合作对象的申请工作.你 ...
- 如何监听input的脚本赋值
今天记录下我解决input值改变监听,大家肯定首先想到onchange方法.对于实时监听改变用onpropertychange.oninput等方法:可是,onchange并不能监听脚本改变的值,对于 ...
- Sublime Text 2 注册码
----- BEGIN LICENSE ----- Andrew Weber Single User License EA7E- 813A03DD 5E4AD9E6 6C0EEB94 BC99798F ...
- PHP 之mysql空字符串问题
有一张user表如下所示:字段name不能为空. CREATE TABLE `user` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) NOT NULL, `a ...
- wireshark抓一抓,看是不是另一个机器也企图DHCP
早上的问题,昨晚四点睡,今早九点半起... 到公司处理此问题,不知道相关性大不大..