dave_bulac Ответов: 1

Как сохранить прямоугольник на рабочем столе


Здравствуйте, я нарисовал прямоугольник на рабочем столе, но теперь у меня есть некоторые проблемы с ths.
Он исчезает, когда я обновляю рабочий стол или перемещаюсь над каким-то окном. Мне нужно иметь этот прямоугольник на рабочем столе, пока я не нажму какую-нибудь кнопку(например, кнопку обновления).

Что я уже пробовал:

Итак, я рисую прямоугольник на рабочем столе со следующим кодом:

Pen pen = new Pen(Color.Yellow, 2);
            IntPtr desktop = GetDC(IntPtr.Zero);
            using (Graphics g = Graphics.FromHdc(desktop))
            {
                g.DrawRectangle(pen, x, y, width, height);
            }
            ReleaseDC(IntPtr.Zero, desktop);

0x01AA

Вы должны создать прозрачное окно без границы, для которого вы установите "Родительский" на рабочий стол. Затем вы получите сообщения WM_PAINT, в которых вы можете обновить прямоугольник.

dave_bulac

что значит "для которого вы установили "родитель" на рабочий стол"?

BillWoodruff

Было бы интересно узнать цель, причину, почему вы хотите это сделать, и знать, что это может помочь нам помочь вам.

1 Ответов

Рейтинг:
2

OriginalGriff

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

И ваше приложение не "владеет" рабочим столом, поэтому нет никакого механизма для вашего приложения, чтобы быть уведомленным о том, что ваш прямоугольник нуждается в повторном рисовании.
Вы можете сделать это с помощью таймера - но это грязный и неприятный Клудж, - но кроме этого вы можете скопировать рабочий стол, создать временные обои и рисовать на них, чтобы система "поддерживала" ваш рисунок для вас.
Это может помочь: c# - изменение обоев рабочего стола с помощью кода в .NET - Stack Overflow[^]


Philippe Mori

Очевидно, не меняйте обои. Что произойдет, если система будет перезапущена или будет использоваться несколько обоев (Windows 8) или виртуальных рабочих столов (Windows 10)...