Eigene GUI elemente



  • Ich will eine kleine Benutzeroberfläche aufbauen.
    Mir Fallen auch schon zwei Lösungswege ein:
    1. Buttons als Bitmap und bei jedem click abfragen, ob der Mauszeiger innerhalb des Bildes war.
    Ist aber ein bisschen blöd das ganze, der Dummy-Weg eben.
    2. Windows-Fenster nehemen und bei WM_PAINT mein Bitmap zeichnen lassen.
    Da werd ich aber viele Klassen erstellen müssen.

    Gibts einen besseren Weg?
    Ich hätts gern, wenn ein Bitmap eine WinProc hätte, wie ein Fenster.
    Wie funktioniert das eigentlich? Also, dass ein Fenster eine WinProc hat
    und diese eben bei jeder interaktion aufgerufen wird.



  • also ich würd den ersten Weg wählen. Nen Fenster (und Subfenster) kann selber überprüfen ob es angeklickt wurde..
    Quasi brauchst du ne Klasse Objekt (da hatte ich doch vor nen Paar Tagen erst eine Frage zu gehabt?) von der du ales wichtige ableiten kannst (buttons, etc.)
    Die Klasse hat ne Methode clicked(x, y) und gibt die ID des Kindelementes zurück das angeklickt wurde (ruft also die Methode clicked von von jedem Kindobjekt auf), bzw. seine eigene, wenn es angeklickt wurde aber kein Kindelement berührt.

    Dann braucht das Objekt eigentlich noch ne Methode handleEvent(Event) um auf events reagieren zu können.

    War nur bisher zu faul das selber zu machen.. Naja - hilft nix, ich brauch auch sowas...

    cYa
    DjR



  • Darum gehts mir ja: wie schaff ich es, dass ein Object weiss, dass es angeclickt wurde?



  • INTEGER schrieb:

    1. Buttons als Bitmap [...] der Dummy-Weg eben.

    DocJunioR schrieb:

    also ich würd den ersten Weg wählen.

    Das konnte man erwarten. 😎

    Bye, TGGC (Der Held lebt!)



  • TGGC schrieb:

    INTEGER schrieb:

    1. Buttons als Bitmap [...] der Dummy-Weg eben.

    DocJunioR schrieb:

    also ich würd den ersten Weg wählen.

    Das konnte man erwarten. 😎

    Bye, TGGC (Der Held lebt!)

    und du flamest nich ? naaaja..

    Ich stelle halt Pragmatismus vor Raffinesse.. Ansonsten würd ich durchdrehn..



  • DocJunioR schrieb:

    und du flamest nich ?

    Ja.

    Bye, TGGC (Dem beste BdT)



  • Also was wäre denn dein Vorschlag, oh großer Meister (das Weise musste ich wegen Sparmaßnahmen streichen)
    Ich hab mir ne Klasse ImageBox geschrieben, die einfach nur ne Box mit Bitmap darstellt. Die kann ich dann fragen, ob sie angeklickt wurde. Sicherlich kann ich auch nen OnMouseOver und OnMouseOut schreiben, aber ich weiß nicht, ob ich das wirklich brauch..

    Naja. hab nun doch angefangen, ne kleine GUI zu schreiben, allerdings bin ich da noch im Wanken wegens die Architektur und so..



  • ImageBox is a Window. ImageBox has a Bitmap.

    Bye, TGGC (Für echte Fans)



  • So ähnlich siehts in der Klassenansammlung die ich grade baue auch aus - nur früher hatt ich eben aus Faulheit einfach nur - naja. siehe oben.



  • Wo wir schon beim Thema sind:
    Wenn ich jetzt ein Objekt erstelle in dem Text sein soll ist es ja nicht so sinnvoll, dass man für jedes Einzelelement den Font neu lädt. Auf der anderen Seite finde ich es nicht besonders elegant, im Objektkonstruktor, der ja eh schon ziemlich voll ist, die GL-texture mit zu übergeben..

    Hat da wer noch ne andere Idee??



  • Texture bzw. Fontmanager benutzen.

    Bye, TGGC (Für echte Fans)



  • TGGC schrieb:

    Texture bzw. Fontmanager benutzen.

    Bye, TGGC (Für echte Fans)

    Ist wie gemeint ?
    P.S.: muss man dir eigentlich immer erst irgendwas unfreundliches an den Kopf werfen bevor du mehr als nen Halbsatz sagst?



  • Ein Manager, der Instanzen cached. Neue Instanzen werden nur erstellt, wenn diese Textur bzw. Font noch nicht im Speicher ist. Instanzen werden erst wieder zerstört, wenn keine Referenz darauf verweist.

    Bye, TGGC (Für echte Fans)



  • hmm.. ist nen interessantes Konzept..
    Müsste also den Manager so konstruieren, dass er Pro Textur ne Liste von Objekten hat, die diese nutzen (ginge eigentlich auch mit Meshes, etc..) und bei Zerstörung eines darauf zugreifenden Objekts prüft ob die Textur noch von anderen genutzt wird..
    Andere Möglichkeit wäre Polling - "schau regelmäßig nach wer diese Textur nutzt" - aber etwas Rechenaufwendig..

    Muss ich mal weiter drüber sinnieren..



  • Liste ist unnötig, Listenlänge reicht aus. (aka RefCounting)

    Bye, TGGC (Für echte Fans)



  • *gg* auch wahr.
    wenn der Anzahlcounter 0 is, kanns weg



  • Oder Du lädst nur immer zusätzlich nach, und tust erst bei EVENTS wie z.B. Levelwechsel das Ding flushen.



  • ist an sich auch nicht soo doof, alelrdings ist das bei mir sehr fließend, da ich eine große Welt hab.. Hab mir erstmal nach TGGCs Vorschlag ne Liste gebaut die das Ganze verwaltet.
    Nebenbei hab ich dann doch mal angefangen mich etwas tiefer ins OOP einzubauen.. wie auch immer. So als Frage: Unter welchen Umständen bekommt man vom Compiler die Meldung "cannot declare member function class::method within class" ? Hatte eine Klasse in der die Ableitung funktionierte und eine ähnliche bei der das nicht ging..


Anmelden zum Antworten