转载请注明出处:http://www.cnblogs.com/cgblogs/archive/2013/01/16/2863416.html
wxWidgets 事件驱动类都是wxEvtHandler的派生类,它们都会在其内部维护一个事件表。
创建一个静态事件表的步骤:
1) 定义一个直接或者间接继承自wxExtHandler的类。
2) 为每一个你想要处理的事件定义一个处理函数。
3) 在这个类中使用DECLARE_EVENT_TABLE声明事件表。
4) 在.cpp文件中使用 BEGIN_EVENT_TABLE 和 END_EVENT_TABLE 实现一个事件表。
5) 在事件表的实现中增加事件宏,来实现从事件到事件处理过程的映射。
所有的事件处理函数形式都相同,void返回值,一个事件对象作为参数:
void OnQuit(wxCommandEvent& event);
1 #include "wx/wx.h" 2 3 class MyApp : public wxApp 4 { 5 public: 6 virtual bool OnInit(); 7 }; 8 9 // 1) MyFrame继承wxFrame,wxFrame间接继承自wxExHandler 10 class MyFrame : public wxFrame 11 { 12 public: 13 MyFrame(const wxString& title); 14 // 2) 定义处理函数 15 void OnButtonOK(wxCommandEvent& event); 16 17 private: 18 // 3) 声明事件表 19 DECLARE_EVENT_TABLE() 20 }; 21 22 DECLARE_APP(MyApp) 23 IMPLEMENT_APP(MyApp) 24 25 bool MyApp::OnInit() 26 { 27 MyFrame *frame = new MyFrame(wxT("Minimal wxWidgets App")); 28 29 frame->Show(true); 30 31 return true; 32 } 33 34 // 4) 实现事件表 35 BEGIN_EVENT_TABLE(MyFrame, wxFrame) 36 // 5) 增加事件宏,实现事件到事件处理过程映射 37 EVT_BUTTON(wxID_OK, MyFrame::OnButtonOK) 38 END_EVENT_TABLE() 39 40 MyFrame::MyFrame(const wxString& title) 41 : wxFrame(NULL, wxID_ANY, title) 42 { 43 wxButton* button = new wxButton(this, wxID_OK, wxT("退出"), wxPoint(20,20)); 44 } 45 46 void MyFrame::OnButtonOK(wxCommandEvent& event) 47 { 48 Close(); 49 }
处理按钮点击事件的过程
只有Command事件(直接或间接继承自wxCommandEvent的事件)才会被递归的应用到其父窗口的事件表。