Eigener Event



  • Hallo,
    ich versuce mit wxWidgets von einer Klasse (nicht von wxDialog oder ähnlichem abgeleitet) einen Event zu "versenden", der dann von dem aktiven Fenster abgefangen und abgearbeitet wird.
    Im Header steht :

    class wxDatenVerarbeitetEvent : public wxNotifyEvent
    {
    public:
        wxDatenVerarbeitetEvent(wxEventType commandType = wxEVT_NULL, int id = 0): 
                     wxNotifyEvent(commandType, id)
        {}
    
        wxDatenVerarbeitetEvent(const wxDatenVerarbeitetEvent& event): wxNotifyEvent(event)
        {}
    
        virtual wxEvent *Clone() const { return new wxDatenVerarbeitetEvent(*this); }
    
    	DECLARE_DYNAMIC_CLASS(wxDatenVerarbeitetEvent);
    };
    typedef void (wxEvtHandler::*wxDatenVerarbeitetEventFunction) (wxDatenVerarbeitetEvent&);
    
    BEGIN_DECLARE_EVENT_TYPES()
    	DECLARE_EVENT_TYPE(wxEVT_COMMAND_DATEN_VERARBEITET, 801)
    END_DECLARE_EVENT_TYPES()
    
    #define EVT_DATEN_VERARBEITET(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_COMMAND_DATEN_VERARBEITET, id, -1, (wxObjectEventFunction)(wxEventFunction) (wxDatenVerarbeitetEventFunction) & fn,(wxObject *) NULL ),
    
    class CKommando
    {
    public:
    	CKommando(void);
    	virtual ~CKommando(void);
    	virtual void SendEventDatenVerarbeitet(void);
    };
    

    im cpp-File

    DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATEN_VERARBEITET)
    IMPLEMENT_DYNAMIC_CLASS(wxDatenVerarbeitetEvent, wxNotifyEvent)
    ...
    void CKommando::SendEventDatenVerarbeitet(void)
    {
        wxDatenVerarbeitetEvent event(wxEVT_COMMAND_DATEN_VERARBEITET);
    }
    

    ich denke hier fehlt noch so das eine oder andere

    im dialog wo ich gerne den Event bearbeiten möchte

    BEGIN_EVENT_TABLE( CTest, wxDialog )
    
        EVT_WINDOW_DESTROY( CTest::OnDestroy )
        EVT_BUTTON( ID_BUTTON20, CTest::OnButton20Click )
        EVT_DATEN_VERARBEITET(678, CTest::OnDatenVerarbeitet)
    
    END_EVENT_TABLE()
    
    void CTest::OnDatenVerarbeitet(wxDatenVerarbeitetEvent& event )
    {
    	event.Skip();
    }
    

    hier kommt auch nix an.
    Kann mir jemand weiterhelfen??

    Gruß Dscho


  • Mod

    Mir fällt jetzt nichts direkt auf.
    Ausser das du einmal 801 und dann 678 als Eventid angibst.



  • ich habe gefunden was noch gefehlt hat:

    im Dialog, wo ich den Event bearbeiten möchte muss ich mit GetEventHandler() der Klasse CKommando noch sagen wo der Event "hinsoll", und die Funktion

    void CKommando::SendEventDatenVerarbeitet(void)
    

    wie folgt abändern

    void CKommando::SendEventDatenVerarbeitet(void)
    {
    	wxASSERT(m_pEvtHandler);
    	wxDatenVerarbeitetEvent event(wxEVT_COMMAND_DATEN_VERARBEITET);
    	event.SetEventObject( this );
        m_pEvtHandler->ProcessEvent( event );   //in m_pEvtHandler wird gespeichert, wo der Event hinsoll
    }
    

    jetzt funzt es
    Danke nochmal


Anmelden zum Antworten