如何使用c#突出显示鼠标指针位置

时间:2015-02-27 11:21:30

标签: c# .net

我需要一个简单的鼠标指针荧光笔,其形式为以鼠标指针为中心的圆圈。在下面的代码中使用Invalidate()会导致沿着路径的后方圆圈闪烁。它们几乎不引人注意。而且,在我休息鼠标时,它不会绘制圆圈。

我应该考虑在鼠标指针休息位置绘制圆圈的事件(尝试其他鼠标事件)?

有没有办法刷新绘图而不使用invalidate()?

 private void Form1_MouseMove(object sender, MouseEventArgs e)
    {

        SolidBrush myBrush = new SolidBrush(Color.Yellow);
        Graphics gg = this.CreateGraphics();
        Point p = new Point();
        p = e.Location;
        int radius = 10;
        float x = p.X - radius;
        float y = p.Y - radius;
        float width = 5 * radius;
        float height = 5 * radius;
        gg.FillEllipse(myBrush, x, y, width, height);
        gg.dispose();
        Invalidate();

    }

1 个答案:

答案 0 :(得分:0)

首先启用DoubleBuffered = true;

然后这应该做:

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    Invalidate();
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
    float radius = 10f;
    Point pt = PointToClient(Cursor.Position);
    e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
    e.Graphics.FillEllipse(Brushes.Yellow, pt.X - radius, 
                           pt.Y - radius, radius * 2, radius * 2);

}

由于您尝试在背景上突出显示某个点,您可能需要使用半透明颜色,如下所示:

 using (SolidBrush brush = new SolidBrush(Color.FromArgb(160, Color.Yellow)))
     e.Graphics.FillEllipse(brush, pt.X - radius, pt.Y - radius, radius * 2, radius * 2);

您可能希望使用alpha的其他值而不是160。