2015-02-27 3 views
0

Мне нужен простой указатель указателя мыши в виде круга, центрированного указателем мыши. Использование Invalidate() в приведенном ниже коде приводит к тому, что задние круги вдоль пути мерцают. Они едва заметны. Более того, он не рисует круг в тот момент, когда я опираюсь на мышь.Как выделить позицию указателя мыши с помощью C#

Какое событие следует рассмотреть, чтобы нарисовать круг в позиции, в которой находится указатель мыши (пробовал другие события мыши)?

Есть ли способ обновить чертеж без использования 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(); 

    } 
+0

Wrt Flicker: Вы включили DoubleBuffering для формы? - Обычный способ заключается в том, чтобы вызвать сохранение позиции мыши в MoveMove, а затем вызвать Invalidate. Рисунок должен быть выполнен в Paint evnet с использованием его объекта e.Graphics. – TaW

+0

Нет, я не знаю об этом. – navin

+0

Ну, это свойство. Посмотрите на вкладку свойств! – TaW

ответ

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); 

Возможно, вы захотите сыграть с другими значениями для альфы, чем 16 0.

Смежные вопросы