学习CEGUI亟待解决问题二:消息事件传递机制问题

公司的那个项目里面的事件传递看不过眼了哩。那多回调函数的重复代码。看CEGUI的事件机制MS还不错,抽点时间来学习学习。

Day1:

      首先看一下消息传递的过程。就拿点击按钮的左键鼠标弹起消息来说吧。首先还是从wndProc开始,在WM_LBUTTONUP分支接收到鼠标弹起的消息,使用injectMouseButtonUp这个函数将该事件“注射”到系统中去。再遍历系统中所有存在的窗体,让每个窗体依次接收到消息,直到该消息被处理。代码dest_window->onMouseButtonUp(ma);用来处理每个窗体的鼠标左键弹起消息。然后onClicked(args)-> fireEvent(EventClicked, e, EventNamespace)->fireEvent_impl(name, args);-> (*ev)(args);->args.handled |= (*iter->second->d_subscriber)(args);->(*d_functor_impl)(args);->(d_object->*d_function)(args);->映射到具体的消息处理函数。

      其上基本上是将堆栈的内容摆出来了,然后讲讲涉及到的类,包括EventSet(用来存放事件的容器),Event(事件),SubscriberSlot(用来订阅事件)。明天仔细研究下事件机制。

Day2:

      今天来看下事件机制。拿列表框来说吧,    

posted on 2009-04-15 23:30  清风徐来,水波不兴  阅读(746)  评论(0编辑  收藏  举报

导航