【发布时间】:2015-08-25 18:14:31
【问题描述】:
我有一个绘图应用程序,我使用Graphic 对象来绘制一个矩形、圆形和一些线条。该应用程序具有缩放功能,但我试图让平移工作但找不到最佳解决方案。
public partial class Form1 : Form
{
protected Point clickPosition;
protected Point scrollPosition;
protected Point lastPosition;
public Form1()
{
InitializeComponent();
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
AutoScroll = true;
AutoScrollMinSize = new Size(0, 0);
}
float zoom = 100f;
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.ScaleTransform(zoom, zoom);
g.SmoothingMode = SmoothingMode.AntiAlias;
// some demo drawing:
Rectangle rect = panel1.ClientRectangle;
g.DrawEllipse(Pens.Firebrick, rect);
using (Pen pen = new Pen(Color.DarkBlue, 4f))
g.DrawLine(pen, 22, 22, 88, 88);
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
zoom = trackBar1.Value / 10f;
panel1.Invalidate();
}
protected override void OnMouseDown(MouseEventArgs e)
{
clickPosition.X = e.X;
clickPosition.Y = e.Y;
}
protected override void OnMouseUp(MouseEventArgs e)
{
Cursor = Cursors.Default;
lastPosition.X = AutoScrollPosition.X;
lastPosition.Y = AutoScrollPosition.Y;
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Cursor = Cursors.Hand;
scrollPosition.X = clickPosition.X - e.X - lastPosition.X;
scrollPosition.Y = clickPosition.Y - e.Y - lastPosition.Y;
AutoScrollPosition = scrollPosition;
panel1.Invalidate();
}
}
private void Viewer_MouseDown(object sender, MouseEventArgs e)
{
OnMouseDown(e);
}
private void Viewer_MouseMove(object sender, MouseEventArgs e)
{
OnMouseMove(e);
}
private void Viewer_MouseUp(object sender, MouseEventArgs e)
{
OnMouseUp(e);
}
}
这是我到目前为止所拥有的,缺少两件事的代码是使用AutoScrollMinSize 更新最小尺寸和AutoScrollPosition 获取最新位置,问题是两者都可以与DrawImage 和@987654326 一起使用@ 而且我不确定在我的情况下如何让它与线条图和圆圈一起使用。也出于某种原因,我的AutoScrollPosition 对于x 和y 始终为0。
任何想法,或者是否有其他方法来创建平移效果
【问题讨论】: