【问题标题】:Moving mouse quickly doesn't create the points in Red like when moved slowly快速移动鼠标不会像缓慢移动时那样创建红色点
【发布时间】:2013-12-07 23:32:18
【问题描述】:

在 form1 的顶部我做了:

private int pixelscounter;
private int counter;
private float xFactor, yFactor;
List<PointF> points = new List<PointF>();
double increment = 1.25;
double factor = 1.0;
Image img;
private Point startingPoint = Point.Empty;
private Point movingPoint = Point.Empty;
private bool panning = false;
GraphicsPath gp = new GraphicsPath();
GraphicsPath redgp = new GraphicsPath();

然后在 pictureBox1 move 事件中我做了:

if (checkBox2.Checked && e.Button == MouseButtons.Left)
{
    gp.AddLine(e.X * xFactor, e.Y * yFactor, e.X * xFactor, e.Y * yFactor);
    pixelscounter += 1;
    if (pixelscounter == 10)
    {
        redgp.AddEllipse((e.X) * xFactor, (e.Y) * yFactor, 3f, 3f);
        pixelscounter = 0;
    }
    p = e.Location;
    pictureBox2.Invalidate();
}

还有pictureBox2的绘制事件:

if (checkBox2.Checked)
{
    using (Pen pp = new Pen(Color.Green, 2f))
    {
        pp.StartCap = pp.EndCap = LineCap.Round;
        pp.LineJoin = LineJoin.Round;
        e.Graphics.DrawPath(pp, gp);
    }
    using (Pen pp = new Pen(Color.Red, 2f))
    {
        pp.StartCap = pp.EndCap = LineCap.Round;
        pp.LineJoin = LineJoin.Round;
        e.Graphics.DrawPath(pp, redgp);
    }
}

我所做的是,当我单击鼠标左键时,按下鼠标左键,然后在pictureBox1周围拖动鼠标,它在pictureBox2中以绿色绘制一条线,每10个位置(像素)自动创建一个红点。

问题是当我快速或快速移动鼠标时,如果我移动鼠标非常非常慢,红点与 10 个位置(像素)的距离不同,如果我移动鼠标,红点彼此太近或多或少地移动鼠标,似乎彼此之间的点距离还可以,如果我快速/非常快速地移动鼠标,每个红点之间的距离都会大于 10 像素。

如何修复/解决此鼠标移动问题?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    您可以计算开始位置和当前位置之间的差异。然后在其间每 10 个像素绘制一个点,并将新的起始位置设置在您添加的最后一个点上。

    此答案有助于计算此路径:https://stackoverflow.com/a/12550458/1277156

    【讨论】:

      【解决方案2】:

      鼠标只经常向操作系统报告它的位置。通常,该速率约为每秒 100 次。这意味着例如在 1/10 秒内,鼠标将报告其位置 10 次。因此,如果您快速移动鼠标,例如在 1/10 秒内移动 120 个像素,则报告之间的间距大约为 12 个像素。

      某些鼠标驱动程序允许您设置报告速率。花式老鼠每秒最多可以运行 1000 次,但通常每秒不能超过 200 次左右。不幸的是,我不知道有任何 API 可以让您从程序中轻松更改此设置,但如果您以特定鼠标为目标,您可能会有机会。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-09
        • 2011-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多