当前位置: BOLT界面引擎 > 知识库文章 > 元对象输入事件重定向

元对象输入事件重定向

作者:李亚星 2012-08-08

由于之前经常收到反馈,如何把元对象上的某个键盘或者鼠标事件,路由到另外一个对象上,之前的RouteToFather只可以把事件路由到父对象,而在很多情况下该方法并不能满足需求,需要多次路由甚至显示调用目标对象的方法才可以,所以基于这些情况的考虑,xlue266版本起,在核心层增加了消息路由机制,用以处理更复杂的消息重定向需求。

 

    事件重定向和RouteToFather一样,只是对键盘和鼠标事件有效。

   

事件重定向的粒度:

1.         事件粒度

也就是每个事件可以指定自身需要重定向到的目标对象,语法如下:

<event name="OnRButtonDown" file=”xx” func=”xxx” redirect="destobj"/>

 

2.         对象粒度

可以指定该对象的所有输入事件需要重定向到的目标对象,语法如下:

<eventlist redirect="destobj">

         <event name=”xxxx”/>

</eventlist>

 

         在两个粒度的重定向同时存在的时候,事件粒度的优先级会高于对象粒度

         另外事件指定了重定向以后,不影响该事件的自身响应函数和RouteToFather,优先级是事件本身的响应函数>RouteToFather>重定向,具体的规则可以参考在线文档的《输入事件分发和路由策略介绍》,里面有关于此的详细介绍

 

        

事件重定向的定位指令:

                  redirect=”dest_obj”其中的dest_obj支持和GetObject一样的定位指定,灵活性更强大:

 

定位指令是用过:分隔的一个字符串,支持的关键字有如下:

l father 定位到父对象

l tree 定位到所在的对象树(需要绑定到对象树)

l control 定位到所在的owner control

l 其余所有字符串 对象id,又分三种情况:

n 如果当前对象是control object,那么id就是对该control调用GetControlObject返回的对象

n 如果当前对象非control object,那么id就是该对象的id为该字符串的直接子对象

n 如果当前对象是tree,那么id就是对该tree调用GetUIObject返回的直接子对象

 

定位脚本从当前对象出发,从左向右推导,最终演算出目标对象

 

定位脚本示例:

Redirect="tree:b2:x3:father:x4",其中b2是自定义control,这段定位指令所指向的目标对象,相当于如下代码所取到的目标对象:

 

local tree = self:GetOwner()

local b2 = tree:GetUIObject(b2)

local x3 = b2:GetControlObject(x3)

local x3father = x3:GetFather()

 

local count = x3father:GetChildCount()

for i=0,count-1 do

local obj = x3father:GetChildByIndex(i)

if obj:GetID() == x4 then

找到最终结果

end

end

 

 

         事件重定向的新增方法

                  Bool  SetDefaultRedirect(string redirectcmd) 设置对象粒度的重定向

                  Bool  SetRedirect(string eventName, string redirectcmd) 设定指定事件的事件粒度的重定向

 

                  每个事件的重定向只可以指定一次,每次设置会覆盖当前的重定向;对象粒度的重定向也是如此。

                  Redirectcmd指定为nil,可以取消当前的重定向

 

迅雷公司 版权所有 Copyright 2003-2010 Thunder Inc.All Rights Reserved. 意见反馈:xl7doc@xunlei.com