事件处理
当用户点击了一个按钮、关闭一个窗口等等,将触发一个或几个事件。目前WVL支持以下事件。
mouse_click
用户单击鼠标
mouse_dblclick
用户双击鼠标
mouse_down
用户按下一个鼠标的按键
mouse_up
用户释放一个鼠标的按键
mouse_move
当用户在一个图形部件上移动鼠标
resize
当一个部件的大小发生改变
key_press
当用户按下一个键盘的按键
tick
时间间隔器(timer)在指定的时间内触发该事件
当事件被安装之后,所以的事件都会被响应,调用make_event来安装一个事件。但是一个事件的安装需要一个响应事件的回答函数,这个事件响应函数将会被WVL以回调的方式调用。例如,响应一个窗体的mouse_click事件
class MyForm: public
wvl::form
{
public:
MyForm()
{
this->make_event<wvl::event::mouse_click>(wvl::bind_mem_fun(this,
&MyForm::OnClick));
this->show();
}
private:
void OnClick()
//如果你想得到这个事件的相关信息,你可以使用这个事件的参数,如果这样的话,你必须把这个响应函数定义为 void
OnClick(const wvl::event_args& args)
{
//当这个成员函数被调用,就表示鼠标已经单击了这个窗体。
}
};
正如你看到的,实际上,真正的响应函数是一个函数对象(functor),它必须拥有operator()(const wvl::event_args&)这个成员函数。
wvl::bind_mem_fun 创建一个 binder_mem_fun_t
对象 , 它保存这个 this 指针和这个指向成员函数的指针。
不是所有的事件都可以使用于所有的部件上。比如,tick时间就只能使用在timer上,假若这个事件被使用在其他的部件上,这将引起一个编译错误并提示你安装了一个错误的事件。