您的位置:首页 > 产品设计 > UI/UE

HGE 系列教材(9) --- GUI(本文未完成)

2012-08-29 15:28 309 查看
   

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 对象中的所有控件,子类不需要改变它

hgeGUIObject *prev; // 连接 GUI 对象中的所有控件,子类不需要改变它

// hge 指针

static HGE *hge;

2)void Render(void)

渲染控件到屏幕

3)void Update(float fDt)

fDt 上次调用 Update 函数到现在所用的时间(单位是秒)

4)void Enter(void)

控件出现在屏幕上的时候被调用,用于播放控件出现时的动画

5)void Leave(void)

控件离开屏幕的时候被调用,用于播放控件离开屏幕的动画

6)bool IsDone(void)

判断控件出现动画和控件离开动画是否播放完毕

7)void Focus(bool bFocused)

控件获得焦点,bFocused 为 true,反之为 false

8)bool MouseMove(float x, float y)

以控件左上为原点,鼠标指针的坐标。如果控件状态改变,需要通知调用者,那么返回 true,否则返回 false

9)bool MouseLButton( bool bDown)

bDown 如果为 true,表示按下鼠标左键,如果 bDown 为 false,表示松开鼠标左键

10)bool KeyClick( int key, int chr)

key 表示按键的虚拟代码(Virtual code of the pressed key),见下表:

HGEK_LBUTTONLeft mouse button
HGEK_RBUTTONRight mouse button
HGEK_MBUTTONMiddle mouse button (wheel button)
HGEK_ESCAPEESCAPE key
HGEK_BACKSPACEBACKSPACE key
HGEK_TABTAB key
HGEK_ENTERAny of the two ENTER keys
HGEK_SPACESPACE key
HGEK_SHIFTAny of the two SHIFT keys
HGEK_CTRLAny of the two CTRL keys
HGEK_ALTAny of the two ALT keys
HGEK_LWINLeft WINDOWS key
HGEK_RWINRight WINDOWS key
HGEK_APPSAPPLICATIONS key
HGEK_PAUSEPAUSE key
HGEK_CAPSLOCKCAPS LOCK key
HGEK_NUMLOCKNUM LOCK key
HGEK_SCROLLLOCKSCROLL LOCK key
HGEK_PGUPPAGE UP key
HGEK_PGDNPAGE DOWN key
HGEK_HOMEHOME key
HGEK_ENDEND key
HGEK_INSERTINSERT key
HGEK_DELETEDELETE key
HGEK_LEFTLEFT ARROW key
HGEK_UPUP ARROW key
HGEK_RIGHTRIGHT ARROW key
HGEK_DOWNDOWN ARROW key
HGEK_0Main keyboard '0' key
HGEK_1Main keyboard '1' key
HGEK_2Main keyboard '2' key
HGEK_3Main keyboard '3' key
HGEK_4Main keyboard '4' key
HGEK_5Main keyboard '5' key
HGEK_6Main keyboard '6' key
HGEK_7Main keyboard '7' key
HGEK_8Main keyboard '8' key
HGEK_9Main keyboard '9' key
HGEK_A'A' key
HGEK_B'B' key
HGEK_C'C' key
HGEK_D'D' key
HGEK_E'E' key
HGEK_F'F' key
HGEK_G'G' key
HGEK_H'H' key
HGEK_I'I' key
HGEK_J'J' key
HGEK_K'K' key
HGEK_L'L' key
HGEK_M'M' key
HGEK_N'N' key
HGEK_O'O' key
HGEK_P'P' key
HGEK_Q'Q' key
HGEK_R'R' key
HGEK_S'S' key
HGEK_T'T' key
HGEK_U'U' key
HGEK_V'V' key
HGEK_W'W' key
HGEK_X'X' key
HGEK_Y'Y' key
HGEK_Z'Z' key
HGEK_GRAVEGrave accent (`)
HGEK_MINUSMain keyboard MINUS key (-)
HGEK_EQUALSMain keyboard EQUALS key (=)
HGEK_BACKSLASHBACK SLASH key (/)
HGEK_LBRACKETLeft square bracket ([)
HGEK_RBRACKETRight square bracket (])
HGEK_SEMICOLONSemicolon (;)
HGEK_APOSTROPHEApostrophe (')
HGEK_COMMAComma (,)
HGEK_PERIODMain keyboard PERIOD key (.)
HGEK_SLASHMain keyboard SLASH key (/)
HGEK_NUMPAD0Numeric keyboard '0' key
HGEK_NUMPAD1Numeric keyboard '1' key
HGEK_NUMPAD2Numeric keyboard '2' key
HGEK_NUMPAD3Numeric keyboard '3' key
HGEK_NUMPAD4Numeric keyboard '4' key
HGEK_NUMPAD5Numeric keyboard '5' key
HGEK_NUMPAD6Numeric keyboard '6' key
HGEK_NUMPAD7Numeric keyboard '7' key
HGEK_NUMPAD8Numeric keyboard '8' key
HGEK_NUMPAD9Numeric keyboard '9' key
HGEK_MULTIPLYNumeric keyboard MULTIPLY key (*)
HGEK_DIVIDENumeric keyboard DIVIDE key (/)
HGEK_ADDNumeric keyboard ADD key (+)
HGEK_SUBTRACTNumeric keyboard SUBTRACT key (-)
HGEK_DECIMALNumeric keyboard DECIMAL key (.)
HGEK_F1F1 key
HGEK_F2F2 key
HGEK_F3F3 key
HGEK_F4F4 key
HGEK_F5F5 key
HGEK_F6F6 key
HGEK_F7F7 key
HGEK_F8F8 key
HGEK_F9F9 key
HGEK_F10F10 key
HGEK_F11F11 key
HGEK_F12F12 key
如果控件状态修改了,希望通知调用者,那么返回 true,否则为 false
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息