1.假设我们要响应一个单选按钮的控件,因该想到的必须处理的事件
WM_MOUSEMOVE WM_LBUTTONDOWN WM_LBUTTONUP
2.为你的单选按钮注册一个事件
class OurPlayer { public: OurPlayer() { RegisterForEvents(); // Call our Register function }; bool Jump(const CEGUI::EventArgs& /*e*/){}; // Jump for joy private: RegisterForEvents() {
//获得按钮对象完成注册 gJumpBtnWindow->subscribeEvent(CEGUI::PushButton::EventClicked,CEGUI::Event::Subscriber(&OurPlayer::Jump,this)); }; }
//注意subscribeEvent是一个模板函数,所以事件必须写在一个类中(可以试一下把事件写成全局的编译会报错的)3.对事件进行拦截case WM_MOUSEMOVE: CEGUI::System::getSingleton().getDefaultGUIContext().injectMousePosition( (float)(LOWORD(lParam)) , (float)(HIWORD(lParam)) ) ; break; case WM_LBUTTONDOWN: CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonDown( CEGUI::LeftButton ) ; break; case WM_LBUTTONUP: CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonUp( CEGUI::LeftButton ) ; break;//注意这要放在win32的消息函数里,还有就是WM_MOUSEMOVE这个需要使用injectMousePosition,不能够写injectMouseMove,这样不能响应事件,跟到CEGUI代码里发现无论如何拖动鼠标,position的值都是不正确的