在网上转了转,发现了http://www.cegui.org.ui。功能挺强,而且是专门为在3D程序中使用而设计的,现在已经被整合到OGRE中。但是这个库有些过于臃肿,需要很多外部的dependencies才能运行,比如freetype, xerces等等,并且对中文的支持也比较弱。
又在网上找到了几个比较轻量级的UI库,如:
http://guichan.darkbits.org/
http://www.paragui.org/
http://www.picogui.org
没有仔细考察它们的功能,粗看上去都还凑合,但也不是非常理想。于是想如果有时间的话,还是自己写一个UI库算了。
左思右想,如果能给UI部分定义一个标准的程序接口,然后再分别写不同的实现,那就方便多了。而且这样还有助于分离程序的功能和界面。
目前有几个备选方案:
1. 将GUI定义成两组事件的集合:
- 一组事件由GUI根据用户的输入产生,由后台程序负责响应;
- 另一组事件由后台程序产生,由GUI来负责响应;
- 后台程序和GUI都不知道对方的实现细节,它们只能通过这些事件来做交互;
- 这些事件也可以按照“属性”的形式提供给对方:
- 每个属性有如下几个事件组成:
- for application:
- app_read(...)
- app_write(...)
- on_gui_read(...)
- on_gui_write(...)
- for GUI:
- gui_read(...)
- gui_write(...)
- on_app_read(...)
- on_app_write(...)
- GUI的具体表现形式由script文件定义,对application是透明的,类似effect的描述文件(TBD)
2. 后台程序提供一组功能函数供GUI调用,GUI提供一组通用函数用于创建和定制用户界面。
- TBD