wxCloseEvent wird nicht aufgefangen
-
Hallo zusammen
Weiss jemand wieso die Close-Events nicht gefangen werden? Die müssten ja von den Frames zur App-Klasse weitergereicht werden. Wenn ich ausserdem das Paint-Event connecte (zeile 63) blockiert das Logfenster wenn ich ein Menu-Item anwähle. Was ist hier faul? Danke!
P.S.
Ok, ich habe jetzt gelesen dass nur Command-Events propagieren. Die Aufhänger sind aber trotzdem seltsam.class LogWindow: public wxFrame { public: LogWindow(wxWindow* parent, int id): wxFrame(parent, id, _T("Log"), wxPoint(0, 0)) { m_log = new wxTextCtrl(this, -1, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY); CreateStatusBar(); wxMenuBar* mb = new wxMenuBar; wxMenu* fileMenu = new wxMenu; fileMenu->Append(0, _T("Save To File...\tCtrl-S")); wxMenu* editMenu = new wxMenu; editMenu->Append(1, _T("Clear")); mb->Append(fileMenu, _T("&File")); mb->Append(editMenu, _T("&Edit")); SetMenuBar(mb); Connect(wxEVT_COMMAND_MENU_SELECTED, wxMenuEventHandler(LogWindow::OnMenu)); } void OnMenu(wxMenuEvent& evt) { wxMessageBox(wxString::Format(_T("%d"), evt.GetId())); } template<class T> LogWindow& operator << (const T& val) { (*m_log) << val; return *this; } private: wxTextCtrl* m_log; }; class App: public wxApp { private: wxFrame* m_frame; LogWindow* m_log; enum { FRAME_ID, LOG_ID }; public: App() { } bool OnInit() { m_frame = new wxFrame(0, FRAME_ID, _("wxWidgets Test"), wxDefaultPosition, wxSize(512, 384)); m_log = new LogWindow(0, LOG_ID); //Connect(FRAME_ID, wxEVT_PAINT, wxPaintEventHandler(App::OnPaintFrame)); Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(App::OnClose)); m_frame->Show(); m_log->Show(); return true; } void OnPaintFrame(wxPaintEvent& evt) { wxPaintDC dc(m_frame); } void OnClose(wxCloseEvent& evt) { switch(evt.GetId()) { case FRAME_ID: wxMessageBox(_T("Destroying Frame")); m_frame->Destroy(); break; case LOG_ID: wxMessageBox(_T("Destroying Log")); m_log->Destroy(); break; default: wxASSERT(0); break; } } DECLARE_EVENT_TABLE() }; BEGIN_EVENT_TABLE(App, wxApp) END_EVENT_TABLE() IMPLEMENT_APP(App)