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
So, ich weiß, es Funktioniert einwandfrei, ich weiß nur nicht warum ^^ Wäre nett, wenn mir das einer erklären kann =)
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: