1. hge 中 GUI 对象和控件
hge 中 GUI 对象被看作是一个控件的容器,hge 提供了创建 GUI 对象的类 hgeGUI 类
2. hgeGUI 类
1)AddCtrl 函数
void AddCtrl(
hgeGUIObject *ctrl // hgeGUIObject 对象的指针
);
我们通常可以有这样的写法:
gui->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Play"));
这里 hgeGUIMenuItem 是一个控件,继承于 hgeGUIObject 类,注意,我们创建了 hgeGUIObject 对象,但是却没有去销毁它,因为 hgeGUI 类的析构函数会去处理这些问题。
2)SetNavMode
设置 GUI 导航模式(Navigate mode):
void SetNavMode(
int navmode
);
HGEGUI_NONAVKEYS - 无键盘导航
HGEGUI_LEFTRIGHT - 左右按键导航
HGEGUI_UPDOWN - 上下按键导航
HGEGUI_CYCLED - 循环
默认情况下,navmode 被设置为 HGEGUI_NONAVKEYS,对于一个菜单,我们可以这样设置:
SetNavMode(HGEGUI_UPDOWN | HGEGUI_CYCLED);
使用上下键导航,并且循环。
3)SetCursor
设置光标 sprite:
void SetCursor(
hgeSprite *sprite
);
设置光标对应的 sprite,如果为0,表示不显示光标,默认情况为0。注意,光标不受 GUI 对象的管理,也就是用户必须自己释放光标资源。
4)SetFocus
void SetFocus(
int id
);
每个控件都有一个对应的 ID 号,这个 ID 号被称之为控件的标识符,这里通过控件标识符来设置焦点。键盘事件只会被分发到成为焦点的控件上。
5)Enter
开始 GUI Enter 动画
3. hgeGUIObject
hgeGUIObject 是一个抽象类,它有一个纯虚函数 Render
hgeGUIObject 类的子类的对象并不是 GUI 对象,而是 GUI 控件,这一点应该清楚
1)hgeGUIObject 的成员变量
hgeGUIObject 的成员变量都为 public:
// 必须在构造函数中初始化的变量
int id; // 控件标识符
bool bStatic; // 如果为 true 控件无法成为焦点也不会接受键盘事件,同时它将被 navigate 例程忽略(前面已谈到设置 navigate)
bool bVisible; // 控件是否可见,如果为 false,控件将不被渲染
bool bEnabled; // false 时,控件对用户的输入不作出任何回应,但是控件是可以接受到用户的通知(区别于 bStatic)
hgeRect rect; // 控件有界框(bounding box)在屏幕上的区域
DWORD color; // 控件颜色
// 不需要在构造函数中初始化的变量
hgeGUI *gui; // GUI 对象指针
hgeGUIObject *next; // 连接 GUI 对象中的所有控件