您的位置:首页 > 其它

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

2013-01-16 22:22 441 查看
转载请注明出处:/article/5365551.html

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



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

  1) 定义一个直接或者间接继承自wxExtHandler的类。
  2) 为每一个你想要处理的事件定义一个处理函数。
  3) 在这个类中使用DECLARE_EVENT_TABLE声明事件表。
  4) 在.cpp文件中使用 BEGIN_EVENT_TABLE 和 END_EVENT_TABLE 实现一个事件表。
  5) 在事件表的实现中增加事件宏,来实现从事件到事件处理过程的映射。

所有的事件处理函数形式都相同,void返回值,一个事件对象作为参数:

void OnQuit(wxCommandEvent& event);


#include "wx/wx.h"

class MyApp : public wxApp
{
public:
virtual bool OnInit();
};

// 1) MyFrame继承wxFrame,wxFrame间接继承自wxExHandler
class MyFrame : public wxFrame
{
public:
MyFrame(const wxString& title);
// 2) 定义处理函数
void OnButtonOK(wxCommandEvent& event);

private:
// 3) 声明事件表
DECLARE_EVENT_TABLE()
};

DECLARE_APP(MyApp)
IMPLEMENT_APP(MyApp)

bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame(wxT("Minimal wxWidgets App"));

frame->Show(true);

return true;
}

// 4) 实现事件表
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
// 5) 增加事件宏,实现事件到事件处理过程映射
EVT_BUTTON(wxID_OK, MyFrame::OnButtonOK)
END_EVENT_TABLE()

MyFrame::MyFrame(const wxString& title)
: wxFrame(NULL, wxID_ANY, title)
{
wxButton* button = new wxButton(this, wxID_OK, wxT("退出"), wxPoint(20,20));
}

void MyFrame::OnButtonOK(wxCommandEvent& event)
{
Close();
}


处理按钮点击事件的过程



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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: