Laden...

Clearscreen nach zeichnen auf dem Desktop

Erstellt von Icew0lfHH vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.170 Views
I
Icew0lfHH Themenstarter:in
1 Beiträge seit 2018
vor 5 Jahren
Clearscreen nach zeichnen auf dem Desktop

Hallo!

mit folgendem Buttonclick erzeuge ich ein Rechteck auf meinem Screen:

        private void createrectangle_Click(object sender, EventArgs e)
        {
            IntPtr desktopPtr = GetDC(IntPtr.Zero);
            Graphics g = Graphics.FromHdc(desktopPtr);
            Rectangle rect = new Rectangle(x, y, width, height);
            Pen redPen = new Pen(Color.Red, 3);       
            g.DrawRectangle(redPen, rect);
        }

mit einem anderen buttonklick vergrössere ich das rechteck horizontal:

        private void recthorizontalplus_Click(object sender, EventArgs e)
        {         
            IntPtr desktopPtr = GetDC(IntPtr.Zero);
            Graphics g = Graphics.FromHdc(desktopPtr);
            Pen redPen = new Pen(Color.Red, 3);
            Rectangle rect = new Rectangle(x, y, width= width+5, height);         
            g.DrawRectangle(redPen, rect);
        }

das neue rechteck wird auf dem screen gezeichnet allerdings bleibt das alte bestehen.
Ich habe schon gegoogelt und erfahren das mit Invalidate oder auch .Clear der screen gelöscht werden kann, allerdings beziehen sich die meisten beispiele auf paintboxen etc, ich zeichne hier direkt auf den bildschirm.
Wie kann ich das gezeichnete rechteck löschen im buttonclick bevor ich das neue zeichne, sodass nur das aktuellste zusehen ist?

hier noch einmal die nötigen infos..

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

        [DllImport("user32.dll")]
        static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc);

        int x = 800;
        int y = 400;
        int width = 100;
        int height = 200;

        private void createrectangle_Click(object sender, EventArgs e)
        {
            IntPtr desktopPtr = GetDC(IntPtr.Zero);
            Graphics g = Graphics.FromHdc(desktopPtr);
            Rectangle rect = new Rectangle(x, y, width, height);
            Pen redPen = new Pen(Color.Red, 3);       
            g.DrawRectangle(redPen, rect);
        }
       
        private void recthorizontalplus_Click(object sender, EventArgs e)
        {      
            IntPtr desktopPtr = GetDC(IntPtr.Zero);
            Graphics g = Graphics.FromHdc(desktopPtr);
            Pen redPen = new Pen(Color.Red, 3);
            Rectangle rect = new Rectangle(x, y, width= width+5, height);         
            g.DrawRectangle(redPen, rect);
        }
    }
}

Danke für die hilfe!

16.806 Beiträge seit 2008
vor 5 Jahren

Könnte mir zwei Dinge vorstellen:

Entweder Du führst auf Dein Graphics Object (g) die Clear() Methode aus.

Oder Du verwendest aus dem gleichen Import

[DllImport("user32.dll")]
public static extern bool InvalidateRect(IntPtr hWnd, IntPtr lpRect, bool bErase);

Genauer kann ichs Dir nicht sagen; Graphic ist nicht mein Themengebiet.
Ich hab einfach 2 Minuten geschaut, was das Objekt an Methoden bzw. die DLLs an Imports bietet.