Используя System.Drawing нарисовать перекрестие на рабочем столе? - PullRequest
0 голосов
/ 09 августа 2011

Я пытаюсь создать очень маленькое служебное приложение c #, которое будет использовать System.Drawing, чтобы нарисовать на моем рабочем столе полноэкранное статичное фиксированное перекрестие, чтобы я мог выровнять некоторые элементы рабочего стола в соответствующем центре экрана.

Я попытался найти несколько примеров, но ничего не нашел, и мне было интересно, есть ли у кого-нибудь опыт в этой области.

Я бы предпочел не делать прозрачное полноэкранное окно для выполнения этого умения, если это возможно.

Ответы [ 3 ]

3 голосов
/ 09 августа 2011

При попытке сделать это возникает масса проблем. Во-первых, у вас нет рабочего стола, поэтому вы никогда не сможете полностью контролировать его, когда он станет недействительным.

[DllImport("User32.dll")]
static extern IntPtr GetDC(IntPtr hwnd);

[DllImport("User32.dll")]
static extern void ReleaseDC(IntPtr dc);

private void DrawDeskTop()
{
  IntPtr desk = GetDC(IntPtr.Zero);
  using (Graphics g = Graphics.FromHdc(desk))
  {
    g.FillRectangle(Brushes.Red, new Rectangle((SystemInformation.WorkingArea.Width / 2) - 4, (SystemInformation.WorkingArea.Height / 2) - 20, 8, 40));
    g.FillRectangle(Brushes.Red, new Rectangle((SystemInformation.WorkingArea.Width / 2) - 20, (SystemInformation.WorkingArea.Height / 2) - 4, 40, 8));
  }
  ReleaseDC(desk);
}

Когда это запустится, все будет отлично выглядеть. Но как только вы переместите свою форму по центру или переместите другие окна, знак плюс исчезнет, ​​поэтому вам придется рисовать его снова, и снова, и снова.

1 голос
/ 09 августа 2011

Вы не можете рисовать на рабочем столе на родном уровне (возможно, за исключением некоторых взломанных в поддержку Win16, которые отключили бы композицию и всякие другие ужасы), поэтому, конечно, не с System.Drawing.Для этого вам нужно создать прозрачное окно размером не менее размера изображения и нарисовать на нем.

0 голосов
/ 09 августа 2011

У вас есть причина для желания использовать код для этого?Я бы использовал вашу любимую программу рисования и создал изображение.Установите это изображение в качестве фона рабочего стола, и это должно дать вам тот же результат, что и ваши запросы в коде (и намного быстрее).

Если вам придется делать это с кодом, я бы изучил использование WPF.Это упростит проблему прозрачности.Тем не менее, у вас все еще есть приложение поверх вашего рабочего стола.Вам придется иметь дело с этой проблемой (и, возможно, несколько других).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...