Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Получение графического контекста рабочего стола


Автор: XavierElf 14.5.2007, 17:03
Хочу я сделать так, чтобы у меня Rectangle рисовался за пределами моей формы, но что-то не получается сделать. Я пробовал таким образом:
Код

                using (Graphics g = Graphics.FromHdc(IntPtr.Zero))
                {
                    mDragRect.Location = SLFLocation;
                    g.DrawRectangle(new Pen(Color.FromArgb(128, 0, 0, 128)), mDragRect);
                }

Но что-то не получается... Как можно реализовать то, что я пытаюсь сделать?

Автор: Gelis 14.5.2007, 17:37
Код

        [DllImport("user32.dll")]
        public extern static IntPtr GetDesktopWindow();
        [DllImport("user32.dll")]
        public static extern IntPtr GetWindowDC(IntPtr hdc);
        static void Main(string[] args)
        {
            using (Graphics gr = Graphics.FromHdc(GetWindowDC(GetDesktopWindow())))
            {
                gr.DrawRectangle(new Pen(Brushes.Beige, 10), 0, 0, 100, 100);
                gr.ReleaseHdc(gr.GetHdc());
                
            }
        }

Автор: XavierElf 15.5.2007, 10:24
а как сделать, чтобы десктоп и все окна на нём обновлялись? то есть, если я рисую рект на контексте десктопа, как потом, если я рект буду перемещать затирать то место, где он сначала был отрисован?

Автор: XavierElf 16.5.2007, 14:13
Ну кто-нибудь знает, как сделать, чтобы произвольный графический объект (даже не объект а часть графического наполнения контекста графического устройства) можно было перемещать по рабочему столу на манер окон? Или посоветуйте, как можно перемещать по экрану не саму форму а её контур, как это происходит при перетаскивании формы за заголовок... Просто у меня форма без заголовка и таскаю её за практически любую выступающую часть  smile А при этом она оставляет за собой шлейф на десктопе... Он конечно пропадает постепенно, но недостаточно быстро для меня...

Автор: Сарт 17.5.2007, 16:01
Попробуй метод Invalidate();

Автор: XavierElf 17.5.2007, 19:01
Цитата(Сарт @  17.5.2007,  16:01 Найти цитируемый пост)
Попробуй метод Invalidate();

smile Ты думаешь я не пробовал инвалидэйтом? Я чем только не пробовал...  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)