wxWidgets 学习笔记 之 2事件驱动(1)

时间:2022-08-26 16:59:41

转载请注明出处http://www.cnblogs.com/cgblogs/archive/2013/01/16/2863416.html

wxWidgets 事件驱动类都是wxEvtHandler的派生类,它们都会在其内部维护一个事件表。

wxWidgets 学习笔记 之 2事件驱动(1)

创建一个静态事件表的步骤:

  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 }

 

处理按钮点击事件的过程

wxWidgets 学习笔记 之 2事件驱动(1)

只有Command事件(直接或间接继承自wxCommandEvent的事件)才会被递归的应用到其父窗口的事件表。

wxWidgets 学习笔记 之 2事件驱动(1)