wxWidget - Event erstellen



  • Hey,

    ich möchte gerne ein eigenes Event erstellen, das ich dann anschließend auslösen kann. Dabei ist es mir besonders wichtig, dass ich den Code nicht unnötig aufblähe. Im Endeffekt reicht mir also vermutlich folgendes:

    if (...)
    {
         frame->AddPendingEvent(myEvent("bla", data));
    }
    
    void Frame::OnMyEvent(MyEvent& event)
    {
         // Do Something
    }
    

    Welche Makros brauche ich dafür? Die Codes waren alle seeeehr(!) lang. Das brauche ich doch sicherlich nicht alles?

    Meeeez



  • Schau dir mal die Artikel zu wxWidgets an, dort wird auch ein eigenes Event Definiert und genutzt.



  • Mein Event sieht so aus:

    // Header
    
    extern const wxEventType wxEVT_DATA;
    
    class wxDataEvent : public wxEvent
    {
       boost::any data;
    
    public:
       wxDataEvent () : wxEvent(0, wxEVT_DATA) { }
       wxDataEvent (const boost::any& data) : wxEvent(0, wxEVT_DATA), data(data) {  }
       ~wxDataEvent () { }
    
       wxEvent* Clone () const { return new wxDataEvent(*this); }
    
       void setData (const boost::any& data) { this->data = data; }
       boost::any getData () const { return data; }
    
       template<typename T> T getData () const { return boost::any_cast<T>(data); }
    };
    
    typedef void (wxEvtHandler::*wxDataEventFunction)(wxDataEvent&);
    
    #define wxDataEventHandler(func) \
       (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxDataEventFunction, &func)
    
    // CPP
    
    const wxEventType wxEVT_DATA = wxNewEventType();
    

    Kann allerdings nur per wxEvtHandler::Connect() verbunden werden. Wenn du auch den Event-Table-Schrott verwenden willst, brauchst du noch ein zusätzliches #define dafür, den ich mangels Interesse an Event-Tables aber nicht mehr weiss.


Anmelden zum Antworten