Подсветка курсора C # / подписчик - PullRequest
3 голосов
/ 12 апреля 2010

Как выделить системный курсор? Как и многие приложения для записи экрана. В идеале я хотел бы показать ореол вокруг этого. Спасибо

1 Ответ

6 голосов
/ 12 апреля 2010

Для чисто управляемого решения следующий код нарисует эллипс на рабочем столе в текущей позиции курсора мыши.

Point pt = Cursor.Position; // Get the mouse cursor in screen coordinates

using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
{        
  g.DrawEllipse(Pens.Black, pt.X - 10, pt.Y - 10, 20, 20);
}

Используя таймер, вы можете, например, обновлять положение мыши каждые 20 мс и рисовать новый алекс (эллипс).

Есть и другие, более эффективные способы, которые я могу придумать, но они требуют необратимого кода с использованием системных перехватчиков. Взгляните на SetWindowsHookEx для получения дополнительной информации об этом.

Обновление: вот пример решения, которое я описал в моих комментариях, оно просто грубое и готово для тестирования.

  public partial class Form1 : Form
  {
    private HalloForm _hallo;
    private Timer _timer;

    public Form1()
    {
      InitializeComponent();
      _hallo = new HalloForm();
      _timer = new Timer() { Interval = 20, Enabled = true };
      _timer.Tick += new EventHandler(Timer_Tick);
    }

    void Timer_Tick(object sender, EventArgs e)
    {
      Point pt = Cursor.Position;
      pt.Offset(-(_hallo.Width / 2), -(_hallo.Height / 2));
      _hallo.Location = pt;

      if (!_hallo.Visible)
      {
        _hallo.Show();
      }
    }    
  }

  public class HalloForm : Form
  {        
    public HalloForm()
    {
      TopMost = true;
      ShowInTaskbar = false;
      FormBorderStyle = FormBorderStyle.None;
      BackColor = Color.LightGreen;
      TransparencyKey = Color.LightGreen;
      Width = 100;
      Height = 100;

      Paint += new PaintEventHandler(HalloForm_Paint);
    }

    void HalloForm_Paint(object sender, PaintEventArgs e)
    {      
      e.Graphics.DrawEllipse(Pens.Black, (Width - 25) / 2, (Height - 25) / 2, 25, 25);
    }
  }
...