您的位置:首页 > 其它

wxWidgets中事件处理过程

2012-08-23 06:32 106 查看
http://blog.csdn.net/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"的输入:

[cpp:nogutter]
view plaincopyprint?

void MyTextCtrl::OnChar( wxKeyEvent& event )
{
if ( wxIsalpha( event.KeyCode() ) )
{
// 这些按键在可以接受的范围,所以按照正常的流程处理

event.Skip();
}
else
{
// 这些事件不再我们可以接受的范围,所以不用调用函数Skip

// 由于事件表已经匹配并且没有调用函数Skip,所以事件处理

// 过程不会再继续匹配别的事件表,而是认为时间处理已经结束。

wxBell();
}
}

[cpp:nogutter] 
view plaincopyprint?

class  MyFrame : public wxFrame  
{  
public:  
    MyFrame( const wxString& title );  
    void OnQuit( wxCommandEvent& event );  
    void OnAbout( wxCommandEvent& event );  
protected:  
private:  
    // DECLARE_EVENT_TABLE()已经被注释掉了!
  
};  

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_S***E保存文件
wxID_S***EAS文件另存为(应该弹出文件位置对话框)
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_YESYES
wxID_NONo
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_S***ED恢复到上次保存的状态
为了避免你自己定义的标识符和这些预定义的标识符重复,你可以使用大于wxID_HIGHEST的标识符或者小于wxID_LOWEST的标识符。

六、自定义事件
理解中。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: