wxWidgets通过事件的形式进行各个模块之间的通知

一般有2种情况下的事件, 一种是框架预先定义了一些公共的事件, 这些值的范围在wxID_LOWEST和wxID_HIGHEST之间

还有一种是自定义的事件, 一般可以通过wxID_XXX事件的形式定义

 

 

包含的主要类:wxEvtHandler, wxWindow, wxEvent

介绍:

在2.0之前, 事件处理通过回调的虚函数来支持, 比如说OnSize, 在2.0之后, 使用事件表来代替, 并使用部分异常

一个事件表替代实现文件来告诉wxWidgets如何实现事件到函数的映射, 这些函数不在是虚函数,名字可以自定义, 但是必须得有一个事件参数和返回为void

 

类似的定义:

事件类型, 事件ID, 对应的调用函数

image

流程

定义事件名:

image

定义事件表:

image

这个宏,可以出现在类的任何部分(公共,保护或私有),但它可能是更好的插入在结束时,因为这个宏可能会改变访问保护模式,这可能会产生意外
最后,如果你不喜欢使用静态初始化的事件表,你也可以动态使用wxEvtHandler宏::连接到连接的事件处理程序在运行时,动态。看到事件的样本,这样做的一个例子。

事件传播方式:

一些基础事件:

wxEvent                              基础事件

wxActivateEvent               激活窗口或者应用时候的激活事件

wxCloseEvent                    关闭窗口或者结束会话事件

wxEraseEvent                     擦除背景事件

wxFocusEvent                    焦点改变事件

wxKeyEvent                        键盘按键事件

wxIdleEvent                         死亡事件

wxInitDialogEvent              初始化对话框事件

wxJoystickEvent                 滑动杆事件

wxMenuEvent                     菜单事件

wxMouseEvent                   鼠标事件

wxMoveEvent                     移动事件

wxPaintEvent                      绘制事件

wxQueryLayoutInfoEvent 布局事件

wxSetCursorEvent             设置鼠标

wxSizeEvent                        改变大小事件

wxScrollWinEvent              滚动窗口事件

wxSysColourChangedEvent 系统颜色改变事件

wxCommandEvent         命令事件

 

一些控件的事件命令

EVT_COMMAND(id, event, func) EVT_COMMAND_RANGE(id1, id2, event, func) EVT_BUTTON(id, func) EVT_CHECKBOX(id, func) EVT_CHOICE(id, func) EVT_COMBOBOX(id, func) EVT_LISTBOX(id, func) EVT_LISTBOX_DCLICK(id, func) EVT_MENU(id, func) EVT_MENU_RANGE(id1, id2, func) EVT_CONTEXT_MENU(func) EVT_RADIOBOX(id, func) EVT_RADIOBUTTON(id, func) EVT_SCROLLBAR(id, func) EVT_SLIDER(id, func) EVT_TEXT(id, func) EVT_TEXT_ENTER(id, func) EVT_TEXT_MAXLEN(id, func) EVT_TOGGLEBUTTON(id, func) EVT_TOOL(id, func) EVT_TOOL_RANGE(id1, id2, func) EVT_TOOL_RCLICKED(id, func) EVT_TOOL_RCLICKED_RANGE(id1, id2, func) EVT_TOOL_ENTER(id, func) EVT_COMMAND_LEFT_CLICK(id, func) EVT_COMMAND_LEFT_DCLICK(id, func) EVT_COMMAND_RIGHT_CLICK(id, func) EVT_COMMAND_SET_FOCUS(id, func) EVT_COMMAND_KILL_FOCUS(id, func) EVT_COMMAND_ENTER(id, func)