【发布时间】:2012-06-04 04:55:43
【问题描述】:
我正在尝试使用鼠标滚轮放大图片框。 使用以下变量:
public static int offsetX = 0;
public static int offsetY = 0;
public static double scale = .05;
我在图片框中绘制了一系列多边形。但是,我希望左下角指向 0,因此我使用 -y 将所有内容绘制到表单中。绘制的点受到上述变量的影响,但实际点保持不变。
void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
{
if (e.Delta > 0)
scale += .025;
else
scale -= .025;
pictureBox1.Invalidate();
}
当鼠标滚轮向前移动时,我增加了比例变量并刷新了框。它是在图片框绘制方法中使用此代码重新绘制的:
Graphics g = e.Graphics;
foreach (Member m in activeTruss.members)
{
if (m.Visible == true)
{
Point[] pointArray = new Point[m.poly.Points.Count()];
int index = 0;
foreach (System.Windows.Point p in m.poly.Points)
{
pointArray[index].X = (int)((p.X + offsetX) * scale);
pointArray[index].Y = (int)-((p.Y + offsetY) * scale);
index++;
}
SolidBrush myBrush = new SolidBrush(m.color);
g.FillPolygon(myBrush, pointArray);
}
}
它缩放了正确的量,但它似乎向左上角缩放,因为偏移量保持不变。缩小时则相反。我应该如何在转动鼠标滚轮时编辑偏移量以便直接向鼠标下方的点缩放?
【问题讨论】:
-
+1,反对票对这个问题有点苛刻,即使没有代码,考虑到问题中已经提供的内容,居中的概念是通用的
-
规模上的
f是不必要的,只是在编译后的代码中添加了更多命令。 (单 [float] 到 double 的转换) -
谢谢 Cole,那是我在浮动时忘记的一段剩余代码。
标签: c# zooming picturebox mousewheel