我们已经看到如何使用静态EVENT TABLE来处理EVENT;但这种方式不够灵活。下面我们来看看如何在Event和处理函数间实现动态Bind。
仍然以那个简陋的Frame作为例子。
首先删除所有的静态Event处理代码;包括wxDECLARE_EVENT_TABLE和wxBEGIN_EVENT_TABLE/wxEND_EVENT_TABLE。但保留MyFrame::OnQuitButton事件处理函数。在MyFrame的构造函数的末尾添加一行代码,如下所示:
MyFrame :: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame(NULL, wxID_ANY, title, pos, size) { toolBar = new wxToolBar(this, wxID_ANY); quitButton = new wxButton(toolBar, ID_BUTTON_QUIT, wxT("Click me")); toolBar->AddControl(quitButton); SetToolBar(toolBar); // bind event dynamic Bind(wxEVT_BUTTON, &MyFrame::OnQuitButton, this, ID_BUTTON_QUIT); }
Bind参数含义如下:
wxEVT_BUTTON:表示将要Bind一个Button Event。
&MyFrame::OnQuitButton:将由MyFrame的OnQuitButton成员函数处理该事件。
this:处理该事件的EventHandler。MyFrame继承于wxFrame,所以MyFrame实际上间接继承于EventHandler class。
ID_BUTTON_QUIT:Button Control的ID。