wxWidget中的事件响应的方式,是基于事件表的方式,而不是采用虚函数的方式。
假如针对一个wxWindow类型的窗口,想要响应这个窗口的一些事件,通常我们会这样写:
MyWindow.h文件class MyWindow : public wxWindow
{
...
DECLARE_EVENT_TABLE()
};
MyWindow.cpp文件:
#include "MyWindow.h"
BEGIN_EVENT_TABLE( MyWindow, wxWindow )
EVT_XXX_EVENT(wxMy_EVENT_ID, MyWindow::OnMyEventFunc)
END_EVENT_TABLE()
可以看到有很多宏替我们做了很多事情,但是到底做了什么事情呢?
1. DECLARE_EVENT_TABLE
#define DECLARE_EVENT_TABLE() \
private: \
static const wxEventTableEntry sm_eventTableEntries[]; \
protected: \
static const wxEventTable sm_eventTable; \
virtual const wxEventTable* GetEventTable() const; \
static wxEventHashTable sm_eventHashTable; \
virtual wxEventHashTabl