wxWidgets是事件驱动的,使用下面的宏
DECLARE_EVENT_TABLE()//声明一个事件宏 enum IdList { Id_Btn_1 = wxID_HIGHEST+1//定义一个按钮的ID }; BEGIN_EVENT_TABLE(MyWxFrame, wxFrame) EVT_BUTTON(Id_Btn_1,MyWxFrame::OnTips)//将按钮与函数绑定 END_EVENT_TABLE()
以下的事件不会传递到其父窗口,因为他们传给父窗口没有什么意义
wxActivate, wxCloseEvent, wxEraseEvent, wxFocusEvent, wxKeyEvent, wxIdleEvent, wxInitDialogEvent, wxJoystickEvent, wxMenuEvent, wxMouseEvent, wxMoveEvent, wxPaintEvent, wxQueryLayoutInfoEvent, wxSizeEvent, wxScrollWinEvent, wxSysColourChangedEvent
举例拦截一个键盘事件,只有拼音字母才可以响应,代码如下
EVT_KEY_DOWN(MyWxFrame::OnChar) void MyWxFrame::OnChar(wxKeyEvent& event) { if (wxIsalpha(event.GetKeyCode())) { wxString msg = wxT("Hello World"); wxMessageBox(msg, wxT("提示"), MB_OK); } }
Connect(m_button1->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&MyWxFrame::OnTips);
Connect(m_button1->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MyWxFrame::OnTips));
如果事件处理的参数是wxXYZEvent,那么相应的它的事件处理函数的类型就是wxXYZEventHandler。
动态终止事件绑定
Disconnect(m_button1->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MyWxFrame::OnTips));
如果想使用系统自己定义的话,使用wxID_ANY,如下:
m_button1 = new wxButton(this, wxID_ANY, wxT("提示"), wxDefaultPosition, wxDefaultSize, 0);
enum IdList { Id_Btn_1 = wxID_HIGHEST+1 };(wxID_LOWEST,wxID_HIGHEST)中间的数值是系统自己定义的标识符,一般不要更改。如:
wxID_OK | 确定 |
wxID_CANCEL | 取消 |
wxID_STATIC | 静态文本标识符 |
wxID_EXIT | 退出菜单标识符 |
wxID_OPEN | 打开标识符 |
在event.h中,wxWidgets定义了一些常用的事件标识,右键转到定义即可看到
EVT_SIZE,EVT_CLOSE,EVT_PAINT,EVT_NC_PAINT,EVT_CHAR
EVT_KEY_DOWN,EVT_KEY_UP,EVT_HOTKEY,EVT_KILL_FOCUS
EVT_LEFT_DOWN,EVT_LEFT_DCLICK……
比较多,就不一 一介绍了。
我们也可以自己定义一些事件,可以看一看教程第3章中的介绍。