1.wxEvtHanlder
2.事件处理函数
3.DECLARE_EVENT_TABLE
4.BEGIN_EVENT_TABLE
END_EVENT_TABLE
5.定义事件宏
MyFrame:public wxFrame{
1.void OnSize(wxSizeEvent& e);
2.void onButtonOK(wxCommandEvent& e);
private:
DECLARE_EVENT_TABLE()
}
wxButton* btn=new wxButton(this,wxID_OK,wxT("OK"),wxPoint(200,200);
BEGIN_EVENT_TABLE(MyFrame,wxFrame)
EVT_BUTTON(wxID_OK,MyFrame::OnButtonOK)
EVT_SIZE(..
END_EVENT_TABLE()
事件处理会在窗口控件的继承关系或者 类继承关系中搜索。
【
wxCommandEvent事件创建,包含标识符 wxID_OK,wxEVT_COMMAND_BUTTON_CLICKED,
wxEvtHandler::ProcessEvent 匹配
】
wxKeyEvent& - Skip() - 正常处理
wxBell() - 不会继续匹配事件
wxWindow::PushEventHandler
wxWindow::PopEventHandler
wxWindow::GetEventHandler
----???---p58
动态事件处理方法:
wxEvtHandler::Connect
wxEvtHandler::Disconnect - 不需要手动,窗口释放时自动调用
动态映射放在 OnInit函数中:
frame -> Connect(wxID_EXIT,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(MyFrame::OnQuit));
..
frame->Disconnect(wxID_EXIT,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(MyFrame::OnQuit));
窗口标识符:
只需要在固定上下文唯一
wxID_ANY 自动生成,不需要事件处理
自定义事件: - 没看懂 p67
wxEVT_FONT_SELECTION_CHANGED(id,func)
class wxCustomEvent : public wxNotifyEvent
{
public:
wxCustomEvent(wxEventType commandType==wxEvent_NULL,int id=0):wxNotifyEvent(commandType,id){}
wxCustomEvent(const wxCustomEvent& event):wxNotifyEvent(event){}
virtual wxEvent *Clone() const{return new wxCustomEvent(*this);}
DECLARE_DYNAMIC_CLASS(wxCustomEvent);
}
typeof void (wxEvtHandler::*wxCustomEvent)(wxCustomEvent&);