今天搞定了EditBox.实现的原理就如昨天文章所说,每一行分别使用一个TextAreaOverlayElement来保存对应的文本.同时在判断字体长度的时候,使用Ogre::DisplayString类的接口.目前看上去工作良好.本来还有计划实现EditBox文本图片混排的,思路都想好了,每一行使用一个OverlayContainer来保存,每一行的文本和对应的图片是对应这个OverlayContainer的子成员.不过由于一些其他原因,这个打算放一放,以后再来处理.
今天利用boost::bind 和boost::function实现了一个工厂模式,这个模式用在了OEGUIsystem创建Widget和Windows的过程当中.这个模式方便的地方在于,写了一个子类之后,程序运行中调用一个宏就可以把这个类添加进工厂的创建功能中去,不用写那些烦人的factory接口,以前的代码没有任何地方需要更改.有关这个方法的实现请看这里.
http://blog.csdn.net/moonstrace/archive/2010/03/24/5410287.aspx
在这里可以下载OEGUISystem的源代码.
http://download.csdn.net/source/2159543
以下是OEGUISystem的使用示例(前面几篇文章的示例代码有些地方需要更改了).