GDI+ Anfänger Problem
-
Hallo,
folgendes Problem: Es passier nicht!
Ich bin Anfänger und versuche mich in der GDI+ zurechtzufinden, hab ein paar Beispiele gesehen und hab nun diesen Code:private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { this->Visible = true; Graphics^ g=this->CreateGraphics(); Image^ newImage = Image::FromFile("./bg.png"); TextureBrush^ b=gcnew TextureBrush(newImage); }
Warum passiert nicht?
-
Was soll passieren? Du deklarierst und definierst ein paar Variablen, dadurch passiert nichts sichtbares. Wenn du das Bild anzeigen willst, geb in der nächsten Zeile mal "g->" ein und schau mit IntelliSense, was du für Möglichkeiten zum Zeichnen hast.
-
Was soll ich den hinzufügen?
Hab in einem anderem Beispiel folgendes gesehen:
g->FillRectangle(b, this->ClientRectangle);
Bringt aber nichts!
-
Ja genau, das z.B.
Allerdings machst du das ganze ja noch im FormLoad Event, das ausgelöst wird, wenn die Form geladen wird. Jedesmal, wenn die Form neu gezeichnet wird (beim Erstellen oder wenn ein Fenster drüber geschoben wurde, ...) wird alles übermalt, was du beim FormLoad Event reingemalt hast.
Wenn du den Befehl also in das Form_Load Event packst, wird zwar das gemalt, was du willst, aber im nächsten Moment schon wieder übermalt, weil die Form erstellt wird.Stelle die ganzen Befehle also in das Paint Event der Form, dann werden sie immer dann ausgeführt, wenn die Form gerade gemalt wurde. Um ins Paint Event zu kommen, klicke die Form an, gehe bei den Eigenschaften auf das Blitz-Symbol (Ereignisse) und such nach dem Ereignis "Paint". In das leere Feld rechts davon doppelklicken und du kommst zur Code-Ansicht. In die OnPaint-Funktion schreibst du jetzt z.B.
SolidBrush^ b = gcnew SolidBrush(Color::Aqua); e->Graphics->FillRectangle(b, this->ClientRectangle);
Oder nimm deinen Brush. Ein Graphic-Objekt musst du jetzt auch nicht mehr deklarieren, denn das Event gibt gleich ein PaintEvent mit (e), das das Child "Graphics" hat, welches du zum Malen benutzen kannst.
Viel Spaß beim Malen!