Zeichnen mit mouse_down event?

Aj2010

Mitglied
So, ich kann seit gestern zeichnen =) Ich setz mal den entsprechenden Code-Teil hier rein, damit andere das auch finden und nicht ewig lange arbeiten müssen um endlich zeichnen zu können. Is ja nich jeder im Praktikum und hat Zeit ohne ende ;)

Code:
//Deklaration in der Header:

int anzahl_gezeichnet;
Graphics^ layer;
Pen ^pen1;
Point p;
System::Drawing::Region ^region1;
Image ^img;

//Definition:

point = gcnew List<SchreibKoordinaten^>();  //meine eigene Klasse wegen Objektspeicherung
anzahl_gezeichnet = 0;
mouseDown = false;
pen1 = gcnew Pen(Color::Black, 2);
ResizeRedraw = true;
img = nullptr;

//Meine pictureBox1_Paint Methode:

void Form1::pictureBox1_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) {

         Graphics ^gc = e->Graphics;

         gc->Clear(SystemColors::ControlLight);
            
         if (pictureBox1->Image != nullptr)
         {
             // Korrektur für möglicherweise eingeblendete Bildlaufleisten
             int corrW = 0;
             int corrH = 0;

			 
             
             if (vScrollBar1->Visible)
                 corrW = vScrollBar1->Width;
             if (hScrollBar1->Visible)
                 corrH = hScrollBar1->Height;

			 //pictureBox1->SizeMode = PictureBoxSizeMode::CenterImage;
                 
             gc->DrawImage(pictureBox1->Image, 
                           Rectangle(0, 0, 
                                     pictureBox1->Right - corrW, 
                                     pictureBox1->Bottom - corrH), 
                           Rectangle(hScrollBar1->Value, vScrollBar1->Value, 
                                     pictureBox1->Right - corrW,
                                     pictureBox1->Bottom - corrH),
                                     GraphicsUnit::Pixel);
         }
      }

//Resize und ScrollBars vernachlässige ich jetzt mal. Dafür aber meine Open Methode

void Form1::oeffnenToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
				 if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
         {
             // Bild laden
            img = Image::FromFile(openFileDialog1->FileName);
             
             // Rendering des Bildes anstoßen
			 
             pictureBox1->Image = img;
			 pictureBox1->Visible = true;
			 layer = Graphics::FromImage(img);
			
			 
			 
                 
             // Bildlaufleisten einstellen
             setScrollBars();       
         }
	}

//Und nun die wohl wichtigsten Methoden.

	void Form1::pictureBox1_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
			 if(e->Button == System::Windows::Forms::MouseButtons::Left) {
				mouseDown = true;
				point->Add(gcnew SchreibKoordinaten(e->X + hScrollBar1->Value,e->Y + vScrollBar1->Value));
				layer->FillRectangle(Brushes::Black,e->X + hScrollBar1->Value,e->Y + vScrollBar1->Value, 2, 2);
				pictureBox1->Invalidate();
				 }
		 }
	void Form1::pictureBox1_MouseMove(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
			  hinzufuegen(e->X,e->Y);
			  if(mouseDown) {
				  
				 p = Point(e->X + hScrollBar1->Value, e->Y + vScrollBar1->Value);
				 layer->DrawLine(pen1, point[anzahl_gezeichnet]->getKoord(),p);
				 point[anzahl_gezeichnet]->setKoord(e->X + hScrollBar1->Value, e->Y + vScrollBar1->Value);
				 region1 = gcnew System::Drawing::Region(Rectangle(e->X + hScrollBar1->Value -30, e->Y + vScrollBar1->Value-30, 60,60));
					 pictureBox1->Invalidate(region1);
		 }
}
	void Form1::pictureBox1_MouseUp(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
			 if(e->Button == System::Windows::Forms::MouseButtons::Left) {
				if(mouseDown) {
					 p = Point(e->X + hScrollBar1->Value, e->Y + vScrollBar1->Value);
					 layer->DrawLine(pen1, point[anzahl_gezeichnet]->getKoord(),p);
					 point[anzahl_gezeichnet]->setKoord(e->X + hScrollBar1->Value, e->Y + hScrollBar1->Value);
					 mouseDown = false;
					 ++anzahl_gezeichnet;
					 pictureBox1->Invalidate();
					 
				}
			 }
		 }

So, ich weiß, es Funktioniert einwandfrei, ich weiß nur nicht warum ^^ Wäre nett, wenn mir das einer erklären kann =)
 
Zuletzt bearbeitet: