Mehrere Graphiken in einer Picturebox (Visual C++)



  • Hallo,

    ich habe folgenden Code verbrochen:

    Graphics ^graph = this->pictureBox1->CreateGraphics();
    
    Image ^pic1 = Image::FromFile(L"pic1.gif");
    graph->DrawImage(pic1, 10, 20);
    Image ^pic2 = Image::FromFile(L"pic2.gif");
    graph->DrawImage(pic2, 10, 40);
    

    Das Element pictureBox1 enthält ein Hintergrundbild und die beiden Bilder "pic1.gif" und "pic2.gif" sollen ab einem bestimmten Punkt des Programms im Vordergrund dieser Picturebox erscheinen.
    Ich habe das auf diese Weise implementiert, weil die gifs transparente Bereiche haben, die man nicht sehen soll.
    Bei einem Vordergrundbild klappt das auch, wie ich es mir vorstelle. Aber wenn ich dann weitere hinzufüge, sehe ich immer nur das zuletzt eingefügte Vordergrundbild (in diesem Fall "pic2.gif").
    Wie schaffe ich es, dass mehrere Vordergrundbilder gleichzeitig eingefügt werden können? Ich bin für jede Hilfe dankbar.

    Grüße
    Hendrik



  • Falsches Forum! Was du da machst, ist C++/CLI...



  • Sorry. Wer lesen kann, ist klar im Vorteil... 😉

    Bitte verschieben!



  • Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Wie sieht denn Den Bild aus wenn es gezeichnet wird?
    Transpararent != Transparent in einer PicBox.



  • Die Tranzparenz ist eigentlich nicht das Problem.
    Die Vordergrundbilder sind beide Kugeln, die sich nicht überlappen.
    Das endgültige Bild sollte also beide Kugeln auf dem Hintergrund zeigen. Man sieht aber nur die zweite.

    Ich habe das Problem schon fast gelöst, indem ich an der Stelle, wo der obige Code steht, statt dieses Codes eine Boolsche Variable is_shown auf true setze, und das Zeichnen im Paint-Ereignis in einer if-Abfrage, die is_shown überprüft, erledige.

    Jetzt werden auch beide Kugeln angezeigt, aber ein Label, das vorher in dem Bereich angezeigt wurde und direkt vor "is_shown = true" auf "label1->Visible = false" gesetzt wird, hinterlässt ein Loch in der Kugel.



  • Graphics ^graph = this->pictureBox1->CreateGraphics();
    
    Image ^pic1 = Image::FromFile(L"pic1.gif");
    graph->DrawImage(pic1, 10, 20);
    Image ^pic2 = Image::FromFile(L"pic2.gif");
    graph->DrawImage(pic2, 10, 40);
    
    Graphics ^graph = this->pictureBox1->CreateGraphics();
    

    Vermutlich außerhalb von OnPaint der Picturebox. (Wenn nein, warum ?)
    Wenn ja: Pack den Code darunter mal in das OnPaint Event der Picturebox.



  • Es klappt jetzt so, wie ich es mir vorstelle. Das Problem war der Aufruf des Paint-Ereignisses.
    Ich habe es zuerst mit Invalidate versucht. Das brachte das falsche Ergebnis.
    Jetzt mache ich es mit Refresh, und das klappt wunderbar.

    @Knuddlbaer:
    In der ursprünglichen Fassung stand alles außerhalb des Paint-Ereignisses, dann wurde nur das letzte Bild eingefügt.
    In der zweiten Fassung und in der jetzigen steht im Paint-Ereignis:

    if (is_shown)
    {
        Image ^pic1 = Image::FromFile(L"pic1.gif");
        e->Graphics->DrawImage(pic1, 10, 20);
        Image ^pic2 = Image::FromFile(L"pic2.gif");
        e->Graphics->DrawImage(pic2, 10, 40); 
    }
    

    Danke für Eure Hilfe!


Anmelden zum Antworten