| 图象显示和翻转控件(用户自定义控件) |
|
作者:佚名 文章来源:网贝整理|http://www.netbei.com/ 点击数: 更新时间:2005-1-11 0:26:52  |
using System; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Data; using System.Windows.Forms;
namespace ImageZoomer { /// <summary> /// /// </summary> //枚举类型定义,定义图象的四种翻转方式 public enum FlipModeStyle { NoFlip=0,//不翻转 FlipX=1,//水平翻转 FlipY=2,//垂直翻转 FlipXY=3//水平垂直翻转 }
//事件数据类定义,报告图象的显示尺寸 public class DisplaySizeChangedEventArgs:System.EventArgs { public int Width; public int Height; public DisplaySizeChangedEventArgs() { } }
//事件代表的声明 public delegate void DisplaySizeChangedEventHandler(object sender,DisplaySizeChangedEventArgs e);
//用户自定义控件类 public class ImageZoomerControl : System.Windows.Forms.Control { private int width;//控件宽度 private int height;//控件高度 private System.Drawing.Bitmap bitmap;//控件上的图象 private FlipModeStyle flip;//图象的翻转方式 private event DisplaySizeChangedEventHandler eventHandler;//事件
//构造方法,初始化数据成员 public ImageZoomerControl() { width=this.width; height=this.height; bitmap=null; eventHandler=null; }
//宽度属性 [ Category("ImageZoomer"), Description("The displayed image width.") ] public int DisplayWidth { get { return width; } set { if(value>=0) { width=value; Invalidate(this.ClientRectangle); } } }
//高度属性 [ Category("ImageZoomer"), Description("The displayed image height.") ] public int DisplayHeight { get { return height; } set { if(value>=0) { height=value; this.Invalidate(this.ClientRectangle); } } }
//图象属性 [ Category("ImageZoomer"), Description("The image displayed by this control."), DefaultValue(null) ] public Bitmap DisplayImage { get { return bitmap; } set { bitmap=value; if(bitmap!=null) { width=bitmap.Width; height=bitmap.Height; } else { width=this.width; height=this.height; } this.Invalidate(this.ClientRectangle); } }
//翻转方式属性 [ Category("ImageZoomer"), Description("Specify how the image will be flipped.") ] public FlipModeStyle FlipMode { get { return flip; } set { flip=value; this.Invalidate(this.ClientRectangle); } }
//事件属性 [ Category("ImageZoomer"), Description("Occurs when the image size is changed.") ] public event DisplaySizeChangedEventHandler DisplaySizeChanged { add { eventHandler+=value; } remove { eventHandler-=value; } }
protected override void OnPaint(PaintEventArgs pe) { if(bitmap==null) { return; } Graphics g=pe.Graphics;
//转换距阵 System.Drawing.Drawing2D.Matrix transform;//距阵 if(flip.Equals(FlipModeStyle.FlipX)) { transform=new System.Drawing.Drawing2D.Matrix(-1,0,0,1,width,0); } else if(flip.Equals(FlipModeStyle.FlipY)) { transform=new System.Drawing.Drawing2D.Matrix(1,0,0,-1,0,height); } else if(flip.Equals(FlipModeStyle.FlipXY)) { transform=new System.Drawing.Drawing2D.Matrix(-1,0,0,-1,width,height); } else { transform=new System.Drawing.Drawing2D.Matrix(1,0,0,1,0,0); } //设置转换距阵 g.Transform=transform; g.DrawImage(bitmap,new System.Drawing.Rectangle(0,0,width,height), 0,0,bitmap.Width,bitmap.Height, GraphicsUnit.Pixel); //恢复绘图平面 g.ResetTransform();
}
//发出事件的方法 protected virtual void OnDisplaySizeChanged(DisplaySizeChangedEventArgs e) { //调用事件对象指向的方法 this.Invoke(eventHandler,new object[] { this,e } ); }
//重载方法,调用OnDisplaySizeChanged()发出事件 protected override void OnMouseDown(MouseEventArgs e) { width=e.X; height=e.Y; this.Invalidate(this.ClientRectangle);
DisplaySizeChangedEventArgs eventData=new DisplaySizeChangedEventArgs(); eventData.Width=width; eventData.Height=height;
this.OnDisplaySizeChanged(eventData);
base.OnMouseDown(e); }
} } |
| 文章录入:admin 责任编辑:admin |
|
上一篇文章: 如何用Visual C#做组件
下一篇文章: 用Visual C#动态生成组件 |
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |