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
-
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