У меня есть приложение для рисования, в котором я использую объект Graphic
для рисования прямоугольника и кругов и некоторых линий. Приложение имеет возможность масштабирования, но я пытаюсь заставить Panning работать, но не может найти оптимальное решение.Панорама чертежа с панели в C#
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);
}
}
это то, что я до сих пор, код не хватает 2 вещи один Пользуется AutoScrollMinSize
обновить размер мин и AutoScrollPosition
получить последнюю позицию, проблема как можно использовать с DrawImage
и Images
и I» Я не уверен в моем случае, как заставить его работать с рисованием линий и кругами. Также по какой-то причине мой AutoScrollPosition
всегда 0 для x
и y
. Любые идеи, или есть другой способ, чтобы создать эффект панорамирования