随笔 - 119  文章 - 290  trackbacks - 0

博客搬家了哦,请移步
叫我abc

常用链接

留言簿(12)

随笔分类

我的博客

搜索

  •  

积分与排名

  • 积分 - 300690
  • 排名 - 84

最新评论

阅读排行榜

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)  编辑 收藏 引用

FeedBack:
# re: 乱谈CEGUI 2007-05-23 21:26 lmeng
MFC是通过一组宏去实现的控件事件处理,你说的“编程用户继承控件类并覆盖此函数来实现”是改写了一个控件
  回复  更多评论
  
# re: 乱谈CEGUI 2007-05-24 08:28 LOGOLS_
to lmeng:
你说的没错,不过不仅仅消息映射一种,并且这一块并不能改变控件的外观什么的,只是做一下事件处理;
结果MFC还是提供了通过覆盖一些虚函数来改写控件的更多细节。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理