http://blog.youkuaiyun.com/eaglewood2005/article/details/4325497
一、事件表的创建和事件的处理过程
1、静态事件表的创建过程:
(1)、定义一个直接或者间接继承自wxEvtHandler的类。
(2)、定义想处理事件的事件处理函数。
(3)、在DECLARE_EVENT_TABLE中声明事件表。
(4)、在.cpp中用BEGIN_EVENT_TABLE和END_EVENT_TABLE实现一个事件表。
(5)、在事件表中加入事件宏,来实现事件到事件处理过程的映射。
2、事件处理函数的形式
(1)、返回值为void。
(2)、都不是虚函数。
(3)、一个事件对象做为参数。
3、事件处理过程
(1)、需要递归查找类事件表的是:wxCommandEvent以及直接或者间接继承此事件的事件。
(2)、不能传递给父窗口处理的事件:wxActivate,wxCloseEvent,wxEraseEvent,wxFocu-
sEvent,wxKeyEvent,wxIdleEvent,wxInitDialogEvent,wxJoystickEvent,wxMenuEvent,
wxMouseEvent,wxMoveEvent,wxPaintEvent,wxQueryLayoutInfoEvent,wxSizeEvent,
wxScrollWinEvent,wxSysColourChangedEvent。原因在于这些事件只对本窗口有意义。
二、事件的过滤
以上为处理按钮单击事件的过程,由此可知:通过这种方法可以改变本地控件的默认行为,方法是继承一个父控件的继承类,在事件表中使用事件映射宏过滤不想要的事件。
文本框只接受"a"~"z"和"A"~"Z"的输入:
- void MyTextCtrl::OnChar( wxKeyEvent& event )
- {
- if ( wxIsalpha( event.KeyCode() ) )
- {
- // 这些按键在可以接受的范围,所以按照正常的流程处理
- event.Skip();
- }
- else
- {
- // 这些事件不再我们可以接受的范围,所以不用调用函数Skip
- // 由于事件表已经匹配并且没有调用函数Skip,所以事件处理
- // 过程不会再继续匹配别的事件表,而是认为时间处理已经结束。
- wxBell();
- }
- }
三、事件表的挂载
正在理解。。。
四、动态事件的处理方法
也就是运行期改变事件表的映射关系。
两个有关动态事件处理的API:wxEvtHandler::Connect和wxEvtHandler::Disconnect,一般不用手动调用wxEvtHandler::Disconnect,窗口类被释放的时候自动被调用。
举例:
- class MyFrame : public wxFrame
- {
- public:
- MyFrame( const wxString& title );
- void OnQuit( wxCommandEvent& event );
- void OnAbout( wxCommandEvent& event );
- protected:
- private:
- // DECLARE_EVENT_TABLE()已经被注释掉了!
- };
五、窗口标示符
窗口标识符是在事件系统中用来唯一确定窗口的整数。事实上,在整个应用程序的范围内,窗口标识符不必一定是唯一的,而只要在某个固定的上下文(比如说,在一个frame窗口和它的所有子窗口)内是唯一的就可以了。举例来说:你可以在无数个对话框中使用wxID_OK这个标识符,只要在某个对话框内不要重复使用就可以了。
wxWidgets自动创建的标识符是总是一个负数,所以永远不会和用户定义的窗口标识符重复,用户定义的窗口标识符只能是正整数。
标识符名称 | 描述 | |
wxID_ANY | 让wxWidgets自动产生一个标识符 | |
wxID_LOWEST | 最小的系统标识符值 (4999) | |
wxID_HIGHEST | 最大的系统标识符值 (5999) | |
wxID_OPEN | 打开文件 | |
wxID_CLOSE | 关闭窗口 | |
wxID_NEW | 新建窗口文件或者文档 | |
wxID_SAVE | 保存文件 | |
wxID_SAVEAS | 文件另存为(应该弹出文件位置对话框) | |
wxID_REVERT | 恢复文件在磁盘上的状态 | |
wxID_EXIT | 退出应用程序 | |
wxID_UNDO | 撤消最近一次操作 | |
wxID_REDO | 重复最近一次操作 | |
wxID_HELP | 帮助 (例如对话框上的帮助按钮可以用这个标识符) | |
wxID_PRINT | 打印 | |
wxID_PRINT_SETUP | 打印设置 | |
wxID_PREVIEW | 打印预览 | |
wxID_ABOUT | 显示一个用来描述整个程序的对话框 | |
wxID_HELP_CONTENTS | 显示上下文帮助 | |
wxID_HELP_COMMANDS | 显示应用程序命令 | |
wxID_HELP_PROCEDURES | 显示应用程序过程 | |
wxID_HELP_CONTEXT | 未使用 | |
wxID_CUT | 剪切 | |
wxID_COPY | 复制到剪贴板 | |
wxID_PASTE | 粘贴 | |
wxID_CLEAR | 清除 | |
wxID_FIND | 查找 | |
wxID_DUPLICATE | 复制 | |
wxID_SELECTALL | 全选 | |
wxID_DELETE | 删除 | |
wxID_REPLACE | 覆盖 | |
wxID_REPLACE_ALL | 全部覆盖 | |
wxID_PROPERTIES | 查看属性 | |
wxID_VIEW_DETAILS | 列表框中的按照详细信息方式显示 | |
wxID_VIEW_LARGEICONS | 列表框按照大图标的方式显示 | |
wxID_VIEW_SMALLICONS | 列表框中按照小图标的方式显示 | |
wxID_VIEW_LIST | 列表框中按照列表的的方式显示 | |
wxID_VIEW_SORTDATE | 按照日期排序 | |
wxID_VIEW_SORTNAME | 按照名称排序 | |
wxID_VIEW_SORTSIZE | 按照大小排序 | |
wxID_VIEW_SORTTYPE | 按照类型排序 | |
wxID_FILE1 to wxID_FILE9 | 显示最近使用的文件 | |
wxID_OK | 确定 | |
wxID_CANCEL | 取消 | |
wxID_APPLY | 应用变更 | |
wxID_YES | YES | |
wxID_NO | No | |
wxID_STATIC | 静态文本或者静态图片可以用这个标识符 | |
wxID_FORWARD | 向前 | |
wxID_BACKWARD | 向后 | |
wxID_DEFAULT | 恢复默认设置 | |
wxID_MORE | 显示更多选项 | |
wxID_SETUP | 显示一个设置对话框 | |
wxID_RESET | 重置所有选项 | |
wxID_CONTEXT_HELP | 显示上下文帮助 | |
wxID_YESTOALL | 全部选是 | |
wxID_NOTOALL | 全部选否 | |
wxID_ABORT | 中止当前操作 | |
wxID_RETRY | 重试 | |
wxID_IGNORE | 忽略错误 | |
wxID_UP | 向上 | |
wxID_DOWN | 向下 | |
wxID_HOME | 首页 | |
wxID_REFRESH | 刷新 | |
wxID_STOP | 停止正在进行的操作 | |
wxID_INDEX | 显示一个索引 | |
wxID_BOLD | 加粗显示 | |
wxID_ITALIC | 斜体显示 | |
wxID_JUSTIFY_CENTER | 居中 | |
wxID_JUSTIFY_FILL | 格式 | |
wxID_JUSTIFY_RIGHT | 右对齐 | |
wxID_JUSTIFY_LEFT | 左对齐 | |
wxID_UNDERLINE | 下划线 | |
wxID_INDENT | 缩进 | |
wxID_UNINDENT | 反缩进 | |
wxID_ZOOM_100 | 放大到100% | |
wxID_ZOOM_FIT | 缩放到整页 | |
wxID_ZOOM_IN | 放大 | |
wxID_ZOOM_OUT | 缩小 | |
wxID_UNDELETE | 反删除 | |
wxID_REVERT_TO_SAVED | 恢复到上次保存的状态 |
为了避免你自己定义的标识符和这些预定义的标识符重复,你可以使用大于wxID_HIGHEST的标识符或者小于wxID_LOWEST的标识符。
六、自定义事件
理解中。。。