上一篇有讲到CEGUI对与事件响应的流程并以mousemove为列列举出了大概步骤。此篇主要了解一些其他相关事件的实现.
能注入到CEGUI中的事件主要有:injectChar, injectKeyDown, injectKeyUp, injectMouseButtonDown, injectMouseButtonUp, injectMouseButtonClick, injectMouseButtonDoubleClick, injectMouseButtonTripleClick, injectMouseLeaves, injecMouseMove, injectMousePosition, injectMouseWheelChang, injectTimePulse。可以看到其实就是鼠标消息和键盘消息加上一个时间脉冲,其中有些时间是相关的如如果允许CEGUI自己产生鼠标click事件那么我们可以不使用鼠标单击双击事件的注入。
injectChar(code_point): args(getKeyboardTargetWindow)用当前能响应键盘输入消息的window来构建KeyEventArgs,如果存在该窗口则继续设定args的codepoint 和syskeys属性,然后调用它的onCharacter(args)函数。
injectKeyDown(key_code): 首先要更新d_sysKeys状态 d_sysKeys |= keyCodeToSyskey((Key::Scan)key_code, true);其下步骤与injectChar基本一样,最后调用窗口的onKeyDown函数。
injectKeyUp与injectKeyDown基本过程一样,首先要更新d_sysKeys状态d_sysKeys &= ~keyCodeToSyskey((Key::Scan)key_code, false)注意最后一个参数的值及计算方式。最后调用的是窗口的onKeyUp。
injiectMouseButtonDow(mous