【问题标题】:Dealing with throttled Mouse Move events in .NET在 .NET 中处理受限制的鼠标移动事件
【发布时间】:2011-08-22 14:43:29
【问题描述】:

我正在尝试编写一个用户可以通过按住并移动鼠标来绘制的表单。因此,我订阅了 MouseMove 事件并使用给定的 Point 在该点绘制一个像素。

不幸的是,我移动鼠标的速度越快,消息队列跳过和丢弃的点越多,所以我最终得到的不是笔画的线,而是一系列点。

我需要手动填写每个点之间的空白吗?如果是这样,计算两点之间的点列表的好算法是什么。

【问题讨论】:

    标签: c# .net mouse point mousemove


    【解决方案1】:

    您可以在用户绘制时将点保存为线段,并使用 Graphics.DrawLine 显示这些点。如果您确实想要实际的点,则必须决定是想要直线还是通过它们插入圆弧(圆弧)。

    对于直线,有 http://en.wikipedia.org/wiki/Bresenham's_line_algorithm - 弧线稍微复杂一点 :)

    【讨论】:

      【解决方案2】:

      你应该简单地从你看到鼠标的最后一点到当前位置画一条线。

      【讨论】:

        【解决方案3】:

        以这种方式绘制的正常过程是使用线,而不是点。伪代码如下:

        on mousemove
        {
            draw line from lastCoord to current coordinate
            store current coordinate in lastCoord
        }
        
        on mousedown
        {
            store current coordinate in lastCoord
        }
        

        【讨论】:

          【解决方案4】:

          您应该只使用两个点:用户按下鼠标按钮时的点 (MouseDown) 和释放鼠标按钮时的点 (MouseUp)...然后在这两点之间画一条线。

          例如使用Graphics.DrawLine 方法...

          【讨论】:

            猜你喜欢
            • 2021-02-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-06
            • 2013-04-22
            • 2020-08-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多