第3个回答 2015-11-11
class ImgCtr : UserControl
{
private Image m_Image;
private float m_Scale;
public ImgCtr()
{
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true);
this.m_Scale = 1.0f;
}
public Image Image
{
get
{
return m_Image;
}
set
{
m_Image = value;
SizeF size = new SizeF(this.m_Image.Width * this.m_Scale, this.m_Image.Height * this.m_Scale);
this.AutoScrollMinSize = Size.Ceiling(size);
}
}
public void ScaleImage(float scale)
{
SizeF size = new SizeF(this.m_Image.Width * this.m_Scale, this.m_Image.Height * this.m_Scale);
this.AutoScrollMinSize = Size.Ceiling(size);
this.Invalidate();
}
protected override void OnMouseDown(MouseEventArgs e)
{
if (this.CanFocus)
{
this.Focus();
}
base.OnMouseDown(e);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
PointF start = new PointF(this.AutoScrollPosition.X / this.m_Scale, this.AutoScrollPosition.Y / this.m_Scale);
this.drawImage(e.Graphics, start);
}
private void drawImage(Graphics g, PointF start)
{
g.ScaleTransform(this.m_Scale, this.m_Scale, MatrixOrder.Append);
g.DrawImage(this.m_Image, start.X, start.Y, this.m_Image.Width, this.m_Image.Height);
g.DrawRectangle(SystemPens.Desktop, start.X, start.Y, this.m_Image.Width - 1, this.m_Image.Height - 1);
}
}