cwindow继承于cpropertyset,cpropertyset有一个函数可以添加新的property到集合中:add_property
为了强化控件的能力,可以通过为控件建立新的cproperty子类,并添加到控件中的方式改造控件。
但是不推荐这样,因为需要重新编译····
cproperty只是一个属性接口(interface),在cwindow中,真正的属性类型并非cproperty,
而是int,size,rect,float等等,并且有各种不同的属性操作函数。
通过使用cproperty,可以将所有不同的属性操作函数用同一的函数表现出来:set_property和get_property。
控件本质上就必须和用户的输入相关联,cegui中cwindow与鼠标和键盘的动作紧密联系,这些基本联系
包括鼠标进入区域,鼠标离开区域,鼠标点击,键盘按键起落。
csystem检测到用户的输入(和控件的区域)触发了这些基本联系后,会通知cwindow,
通知的表现为调用和联系相对应的on_xxx函数。
以上是cegui内核部分的用户输入相应方法。
控件对基本联系的响应仅仅是改变控件外观而已,编程用户希望能对各种响应做更特殊的处理。
在mfc中,这一点是通关将on_xxx函数声明为virtual,以及编程用户继承控件类并覆盖此函数来实现的。
cegui通过event-notify这一系统来实现的。
cwindow继承于ceventset,ceventset同样有一个函数可以添加新的event到集合中:add_event
并没有理由或者特殊的需求需要向控件添加新的事件,因为添加了新的事件,
就必须到on_xxx函数中添加该事件被触发的代码。
cevent是一个将事件和订阅者(处理函数)绑定到一起的绑定器,当事件被触发的时候,所有的订阅者都会得到通知。
事件是怎样触发的呢?控件的on_xxx函数,会根据控件的类型和用户输入的情形触发不同的事件。
因此,cegui上所有的事件类型,都是内定的,足够的,不需要修改和添加的。
如果希望给cegui的控件添加新的属性,而又不要求重新编译,办法就是使用
cwindowmanager::load_layout的property_callback回调函数,该回调函数将给编程用户
稍微处理自定义属性的机会。
cegui提供了将响应事件的函数脚本化的功能,这需要实现一个cscriptmodule的子类,提供脚本vm
对函数调用的支持。
posted on 2007-02-04 10:22
LOGOS 阅读(3193)
评论(2) 编辑 收藏 引用