[wxWidgets] Events ohne Message Maps



  • Habe etwas sehr interessantes entdeckt, das vielleicht ein paar Überraschungen bringt. wxWidgets kann seit ein paar Versionen anscheinend Events ohne Messagemaps-Makros verarbeiten. Ausprobieren konnte ich dieses leider noch nicht, aber laut wxwidgets-Forum und einem Sourcebeispiel, funktioniert das ganze mit der Connect-Methode.

    Für gewöhnlich baut man in wxWidgets eine Messagemap aus Makros auf um die Events an seine eigene Methode zu delegieren:

    BEGIN_EVENT_TABLE(MyFrame, wxFrame)
      EVT_MENU(ID_Quit, MyFrame::OnQuit)
      EVT_MENU(ID_About, MyFrame::OnAbout)
    END_EVENT_TABLE()
    

    Auf diese kann man nun auch verzichten und eine etwas schönere Lösung benutzen, die mit C++ Code arbeitet. Folgendes kann man dann in der OnInit()-Methode als Alternative implementieren:

    frame->Connect( ID_Quit, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &MyFrame::OnQuit );
    
    frame->Connect( ID_About, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &MyFrame::OnAbout );
    

    Quelle: http://www.wxwidgets.org/hworld2.txt

    Ich werde es zu Hause dann mal ausprobieren. 🙂


  • Mod

    Ja, das geht schon länger.
    Ich programmiere (fast) ausschliesslich so.
    Manchmal ist es allerdings problematisch die richtige EventID zu bekommen.
    Aber i.d.R. steht das alles in der Doku drin.

    statt wxObjectEventFunction kann man auch wxCommandEventHandler(Main::Quit) schreiben.

    Allerdings sollte man den Code dann in den Constructor der Klasse schreiben,
    und nicht wie in dem Beispiel danach einzelnd aufrufen 😉

    phlox



  • Was hat der Thread für einen Sinn? Das weiß doch eh jeder ernstzunehmende wxWidgets Nutzer.


  • Mod

    unreg schrieb:

    Was hat der Thread für einen Sinn? Das weiß doch eh jeder ernstzunehmende wxWidgets Nutzer.

    Damit es auch die nicht ernstzunehmenden wissen, und
    evtl. eines Tages ernstzunehmend werden.
    Es ist nie falsch das Wort zu verkünden 😉 :p



  • Also die offiziellen Tutorials basieren leider noch auf Messagemaps, also war ich bisher der Meinung, das es auch nur so geht. Ich bin aber auch erst vor ein paar Wochen in wxWidgets eingestiegen.

    Im wxWidgets-Forum wird das Connect() auch nur auf Nachfrage genannt, die dortigen User bevorzugen offiziell die Messagemap. Also, sooo selbstverständlich ist das Ganze nicht.


  • Mod

    Artchi schrieb:

    Also die offiziellen Tutorials basieren leider noch auf Messagemaps, also war ich bisher der Meinung, das es auch nur so geht. Ich bin aber auch erst vor ein paar Wochen in wxWidgets eingestiegen.

    Im wxWidgets-Forum wird das Connect() auch nur auf Nachfrage genannt, die dortigen User bevorzugen offiziell die Messagemap. Also, sooo selbstverständlich ist das Ganze nicht.

    Ja, das kommt aber auch daher das da viele RAD Tools benutzen, und
    einige auch nur wxWidgets da können, wenn man dann etwas mehr
    C++ im Posting erwähnt bekommt man Nachfragen *g*
    Überhaupt ist wxWidgets leider ein wenig Makro verseucht (man schaue
    sich wxArray an *grusel*), aber solange man es nur als GUI einsetzt,
    ist es ein recht gutes Toolkit. (ich benutze es nur dafür, Container etc. nutz ich STL)

    phlox



  • Überhaupt ist wxWidgets leider ein wenig Makro verseucht (man schaue
    sich wxArray an *grusel*)

    hehe, da untertreibt einer aber ein klein wenig. Also wxWidgets ist das einzige der neueren Frameworks, die derart auf Makros setzen. Ein Grund, es zu dumpen, jedenfalls für mich. Ansonsten wäre es aber wirklich sehr nett gewesen, schade drum.

    MfG

    GPC


  • Mod

    GPC schrieb:

    Überhaupt ist wxWidgets leider ein wenig Makro verseucht (man schaue
    sich wxArray an *grusel*)

    hehe, da untertreibt einer aber ein klein wenig. Also wxWidgets ist das einzige der neueren Frameworks, die derart auf Makros setzen. Ein Grund, es zu dumpen, jedenfalls für mich. Ansonsten wäre es aber wirklich sehr nett gewesen, schade drum.

    MfG

    GPC

    Naja, bisher konnte ich sie alle umschiffen...
    Und wxWidgets ist 12 Jahre alt, also sprich mal nicht von neueren 😉



  • phlox81 schrieb:

    GPC schrieb:

    Überhaupt ist wxWidgets leider ein wenig Makro verseucht (man schaue
    sich wxArray an *grusel*)

    hehe, da untertreibt einer aber ein klein wenig. Also wxWidgets ist das einzige der neueren Frameworks, die derart auf Makros setzen. Ein Grund, es zu dumpen, jedenfalls für mich. Ansonsten wäre es aber wirklich sehr nett gewesen, schade drum.

    MfG

    GPC

    Naja, bisher konnte ich sie alle umschiffen...

    😕

    Und wxWidgets ist 12 Jahre alt, also sprich mal nicht von neueren 😉

    Das muss man locker sehen 😉 Inzwischen hätten sie aber mal genug Zeit gehabt, auf modernes C++ umzustellen. Ein gescheiter Funktor für die Events z.B., so wie sigc++ von gtkmm.

    MfG

    GPC


  • Mod

    GPC schrieb:

    phlox81 schrieb:

    GPC schrieb:

    Überhaupt ist wxWidgets leider ein wenig Makro verseucht (man schaue
    sich wxArray an *grusel*)

    hehe, da untertreibt einer aber ein klein wenig. Also wxWidgets ist das einzige der neueren Frameworks, die derart auf Makros setzen. Ein Grund, es zu dumpen, jedenfalls für mich. Ansonsten wäre es aber wirklich sehr nett gewesen, schade drum.

    MfG

    GPC

    Naja, bisher konnte ich sie alle umschiffen...

    😕

    Und wxWidgets ist 12 Jahre alt, also sprich mal nicht von neueren 😉

    Das muss man locker sehen 😉 Inzwischen hätten sie aber mal genug Zeit gehabt, auf modernes C++ umzustellen. Ein gescheiter Funktor für die Events z.B., so wie sigc++ von gtkmm.

    MfG

    GPC

    Ja, gibt bestrebungen in die Richtung für wx3, aber denen ist halt auch die Kompatibilität wichtig.
    Leider auch mit so Kellerkindern wie MSVC6.0. Wenn du aber Kommerzielle nicht
    GPL Programme schreiben willst, die Plattformunabhängig sind, ist wxWidgets eine gute Wahl.

    Und, man KANN die Makros verwenden, MUSS es aber nicht.
    Z.b. die Arrays nutze ich überhaupt nicht für das definieren eigener Arrays.

    phlox



  • phlox81 schrieb:

    Ja, gibt bestrebungen in die Richtung für wx3, aber denen ist halt auch die Kompatibilität wichtig.

    Eh, dann wird's vermutlich nichts halbes und nichts ganzes.

    Leider auch mit so Kellerkindern wie MSVC6.0.

    Ui, das ist böse.

    Wenn du aber Kommerzielle nicht GPL Programme schreiben willst, die Plattformunabhängig sind, ist wxWidgets eine gute Wahl.

    Dem kann man nicht widersprechen. Hier haben die anderen Tookits/Frameworks das nachsehen.

    Und, man KANN die Makros verwenden, MUSS es aber nicht.
    Z.b. die Arrays nutze ich überhaupt nicht für das definieren eigener Arrays.

    kannst du das ausführen bzw. hast irgendwo nen Link, ich ging bisher immer davon aus, man müsse die Makros benutzen...

    MfG

    GPC


  • Mod

    GPC schrieb:

    phlox81 schrieb:

    Ja, gibt bestrebungen in die Richtung für wx3, aber denen ist halt auch die Kompatibilität wichtig.

    Eh, dann wird's vermutlich nichts halbes und nichts ganzes.

    Ja, das befürchte ich auch, gibt eine art Spinoff, nennt sich omgui,
    die sind aber noch nicht sehr weit. Aber interessantes Konzept, dem von wx ähnlich.

    Und, man KANN die Makros verwenden, MUSS es aber nicht.
    Z.b. die Arrays nutze ich überhaupt nicht für das definieren eigener Arrays.

    kannst du das ausführen bzw. hast irgendwo nen Link, ich ging bisher immer davon aus, man müsse die Makros benutzen...

    Hm, Links. Naja, vieles nutze ich einfach nicht.
    Kannst ja mal im wxWidgetsforum nach wxArray oder wxObjectArray
    suchen. da kann man mit so 2 - 3 Makros sich seinen eigenen
    Arraytypen schaffen, imprinzip was std::vector<type> name; macht.
    So gibts einige Dinge, die man aber innerhalb des Toolkits nicht
    nutzen muss, da es keine Schnittstellen gibt, die diese Konstrukte
    verlangen. Wie gesagt, für nur GUI ist es wie ich finde brauchbar,
    und recht einfach. Und mit Connect läuft das auch klasse, die
    EventTables braucht man wirklich nicht.

    phlox



  • Ich will wxWidgets auch nur hauptsächlich für meine GUI nutzen. Für Algorithmen und Datencontainer hab ich ja die Standardlib, für Dateizugriffe u.a. die boost Libs. Man kann sich ja das raussuchen, was man braucht.

    wxWidgets ist zwar ein komplettes Framework, das sogar mit Qt und MFC konkurrieren kann, aber man muß es nicht komplett nutzen. Denn es ist ja modularisiert. Wenn ich die Network-Lib von wx nicht brauche, linke ich diese auch nicht dazu. So wird meine Anwendung auch nicht unnötig groß.

    Letztendlich hat mich wxWidgets in Sachen GUI und "es rennt sofort" überzeugt. Vorallem sind die wx-Leute keine Windows- bzw. MS-Hasser. D.h. es ist schon alles fertig bzgl. VC und es läuft sofort. Die wenigen Makros, mit denen ich dann in Berührung komme, überseh ich deshalb gerne.

    FLTK hatte ich auch ausprobiert, hat auch wunderbar funktioniert. ABER, die selbst gezeichnete GUI sieht schlimmer aus, als unter Windows 3.1!!! 😞 *brrr*



  • Morgen,

    Wie gesagt, für nur GUI ist es wie ich finde brauchbar, und recht einfach. Und mit Connect läuft das auch klasse, die EventTables braucht man wirklich nicht.

    okay, dann werd ich mir das über's Wochenende noch mal genauer anschauen.

    FLTK hatte ich auch ausprobiert, hat auch wunderbar funktioniert. ABER, die selbst gezeichnete GUI sieht schlimmer aus, als unter Windows 3.1!!! 😞 *brrr*

    hehe, das ist ja auch nur dazu gedacht, ein Minimum an Controls zu bieten, um auch auf der letzten Plattform lauffähig zu sein 😉

    MfG

    GPC



  • Ein Minimum an Controls schliesst aber noch lange nicht vernünftig designte Controls aus.



  • Artchi schrieb:

    Ein Minimum an Controls schliesst aber noch lange nicht vernünftig designte Controls aus.

    Schon, aber gutes Design ist etwas aufwändig(er). FLTK zielt gar nicht auf diese Sparte ab. Das wird meistens eh nur in .sh Skripten verwendet. Da tut's das schon, um mal kurz den Benutzer das root - Passwort eintippern zu lassen 😉

    MfG

    GPC



  • hi!
    hier ist einer von den "nicht ernstzunehmenden"... 🙂
    mir war das mit der alternative zu den makros nicht so klar! kann solche tips brauchen, danke!

    ich arbeite jetzt auch schon ne weile mit wxwidgets, hauptsächlich weils weit verbreitet ist, die doku vergleichsweise ausführlich ist und n buch auch erhältlich ist. (für nen anfänger wie mich doch recht wichtig..)

    ich bin gerade dabei eine audioanwendung zu programmieren. (einen kleinen drumsequenzer)
    dabei komm ich nicht umhin mich z.b. auch mit threads zu beschäftigen. es liegt ja nahe da die thread-klassen von wxwidget zu verwenden, ein paar erste versuche hab ich auch schon gemacht...

    was haltet ihr von den wxwidget-thread klassen? sind die ok? oder sollte man besser die von boost nehmen??


Anmelden zum Antworten