在中处理受限制的鼠标移动事件.NET

本文关键字:移动 事件 NET 鼠标 处理 受限制 | 更新日期: 2023-09-27 18:06:32

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

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

我需要手动填写每一点之间的空格吗?若是这样的话,计算两点之间的点列表的好算法是什么。

在中处理受限制的鼠标移动事件.NET

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

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

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

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

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

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

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