wxWidgets:动态EVENT绑定

我们已经看到如何使用静态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。

你可能感兴趣的:(wxwidgets)