事件处理

当用户点击了一个按钮、关闭一个窗口等等,将触发一个或几个事件。目前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上,假若这个事件被使用在其他的部件上,这将引起一个编译错误并提示你安装了一个错误的事件。

 

Return to Index