Linien immer wieder reinzeichnen, ohne dass sie verschwinden



  • Hallo!

    Ich habe ein Fenster und wenn ich irgendwo im Fenster einen Mausklick tätige, dann soll mir von der Position des Mausklicks zum Mittelpunkt des Fensters hin eine Linie gezeichnet werden.

    Mein Problem: Bei jedem Klick verschwindet die alte Linie. Dies liegt an "Invalidate()". Kennt jemand eine passende Alternative?

    Hier der Code:

    #include "stdafx.h"
    #include "windows.h"
    
    #using <mscorlib.dll>
    #using <System.dll>
    #using <System.Windows.Forms.dll>
    #using <System.Drawing.dll>
    
    using namespace System::Windows::Forms;
    using namespace System::Drawing;
    
    ref class MyForm : public Form{
    public: MyForm(){
    			Size = System::Drawing::Size(800,600);
    			Paint += gcnew PaintEventHandler(this,&MyForm::Form_Paint); 
    			MouseDown += gcnew MouseEventHandler(this,&MyForm::Form_MouseDown);
    
    			m = Point(ClientSize.Width/2, ClientSize.Height/2);
    			p = m;
    		}
    private: 
    		Point p, m;
    		void Form_Paint(Object^ pSender, PaintEventArgs^ e){
    			 Graphics^pg = e->Graphics;
    			 Pen^ pen = gcnew Pen(Color::Green);
    			 pg->DrawLine(pen,m.X,m.Y,p.X,p.Y);
    		 }
    		void Form_MouseDown(Object^ pSender, MouseEventArgs^ e){
    			p.X = e->X;
    			p.Y = e->Y;
    			Invalidate();
    		}
    };
    
    using namespace System;
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        MyForm^ f;
    	f = gcnew MyForm;
    	Application::Run(f);
    
        return 0;
    }
    


  • Speichere deine Linien in einer Liste oder ähnlichem und zeichne im OnPaint alle Linien innerhalb der Liste.



  • List<Point> ^punkte = gcnew List<Point>();
    

Anmelden zum Antworten