动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   .Net → 阅读文章

 图象显示和翻转控件(用户自定义控件)

作者:bbcococala 来源:开发者俱乐部 
阅读 数 59 人次 , 2001-12-6 

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);
}

}
}
  

 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:在ASP.NET中面向对象的编程思想
· 下一篇:对错误的态度
· ASP.NET中密码保护,MD5和SHA1算法的使用
· asp.net高级教程(一)---asp.net , 还是asp+ ?
· Asp.net动态生成html页面
· ASP.NET虚拟主机的重大安全隐患(二)
· ASP.NET中使用IFRAME建立类Modal窗口


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077