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

简介: 1. hge 中 GUI 对象和控件 hge 中 GUI 对象被看作是一个控件的容器,hge 提供了创建 GUI 对象的类 hgeGUI 类   2. hgeGUI 类 1)AddCtrl 函数 void AddCtrl(hgeGUIObject *ctrl    // hgeGUIObject 对象的指针); 我们通常可以有这样的写法: gui->AddCtrl(ne

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_LBUTTON Left mouse button
HGEK_RBUTTON Right mouse button
HGEK_MBUTTON Middle mouse button (wheel button)
 
HGEK_ESCAPE ESCAPE key
HGEK_BACKSPACE BACKSPACE key
HGEK_TAB TAB key
HGEK_ENTER Any of the two ENTER keys
HGEK_SPACE SPACE key
 
HGEK_SHIFT Any of the two SHIFT keys
HGEK_CTRL Any of the two CTRL keys
HGEK_ALT Any of the two ALT keys
 
HGEK_LWIN Left WINDOWS key
HGEK_RWIN Right WINDOWS key
HGEK_APPS APPLICATIONS key
 
HGEK_PAUSE PAUSE key
HGEK_CAPSLOCK CAPS LOCK key
HGEK_NUMLOCK NUM LOCK key
HGEK_SCROLLLOCK SCROLL LOCK key
 
HGEK_PGUP PAGE UP key
HGEK_PGDN PAGE DOWN key
HGEK_HOME HOME key
HGEK_END END key
HGEK_INSERT INSERT key
HGEK_DELETE DELETE key
 
HGEK_LEFT LEFT ARROW key
HGEK_UP UP ARROW key
HGEK_RIGHT RIGHT ARROW key
HGEK_DOWN DOWN ARROW key
 
HGEK_0 Main keyboard '0' key
HGEK_1 Main keyboard '1' key
HGEK_2 Main keyboard '2' key
HGEK_3 Main keyboard '3' key
HGEK_4 Main keyboard '4' key
HGEK_5 Main keyboard '5' key
HGEK_6 Main keyboard '6' key
HGEK_7 Main keyboard '7' key
HGEK_8 Main keyboard '8' key
HGEK_9 Main 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_GRAVE Grave accent (`)
HGEK_MINUS Main keyboard MINUS key (-)
HGEK_EQUALS Main keyboard EQUALS key (=)
HGEK_BACKSLASH BACK SLASH key (/)
HGEK_LBRACKET Left square bracket ([)
HGEK_RBRACKET Right square bracket (])
HGEK_SEMICOLON Semicolon (;)
HGEK_APOSTROPHE Apostrophe (')
HGEK_COMMA Comma (,)
HGEK_PERIOD Main keyboard PERIOD key (.)
HGEK_SLASH Main keyboard SLASH key (/)
 
HGEK_NUMPAD0 Numeric keyboard '0' key
HGEK_NUMPAD1 Numeric keyboard '1' key
HGEK_NUMPAD2 Numeric keyboard '2' key
HGEK_NUMPAD3 Numeric keyboard '3' key
HGEK_NUMPAD4 Numeric keyboard '4' key
HGEK_NUMPAD5 Numeric keyboard '5' key
HGEK_NUMPAD6 Numeric keyboard '6' key
HGEK_NUMPAD7 Numeric keyboard '7' key
HGEK_NUMPAD8 Numeric keyboard '8' key
HGEK_NUMPAD9 Numeric keyboard '9' key
 
HGEK_MULTIPLY Numeric keyboard MULTIPLY key (*)
HGEK_DIVIDE Numeric keyboard DIVIDE key (/)
HGEK_ADD Numeric keyboard ADD key (+)
HGEK_SUBTRACT Numeric keyboard SUBTRACT key (-)
HGEK_DECIMAL Numeric keyboard DECIMAL key (.)
 
HGEK_F1 F1 key
HGEK_F2 F2 key
HGEK_F3 F3 key
HGEK_F4 F4 key
HGEK_F5 F5 key
HGEK_F6 F6 key
HGEK_F7 F7 key
HGEK_F8 F8 key
HGEK_F9 F9 key
HGEK_F10 F10 key
HGEK_F11 F11 key
HGEK_F12 F12 key

如果控件状态修改了,希望通知调用者,那么返回 true,否则为 false

相关文章
|
10月前
《QT从基础到进阶·十一》QStackedWidget和QListWidget使用
《QT从基础到进阶·十一》QStackedWidget和QListWidget使用
229 0
《QT从基础到进阶·十一》QStackedWidget和QListWidget使用
|
10月前
《QT从基础到进阶·十二》QPixmap.load加载图片不更新问题
《QT从基础到进阶·十二》QPixmap.load加载图片不更新问题
190 0
|
API Windows
刘金玉的零基础VB教程073期:windows API使用入门 sleep
刘金玉的零基础VB教程073期:windows API使用入门 sleep
163 0
|
vr&ar 图形学
【Unity3D 灵巧小知识点】 | Unity中 OnEnable 和 Awake、Start 的区别
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、r美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。
|
C#
Silverlight 游戏开发小技巧:技能冷却效果2(Cool“.NET研究”down)2
  可能会奇怪为什么有来一个第2号版本,其实,这是改进版本,而这个改进版本实现起来更加容易,更加方便,但是问题也是很明显的,因为会加上一个上海徐汇企业网站设计与制作100多KB的DLL,对于网页游戏来说,任何1KB都是宝贵的资源,就为了这个小效果而平白无故增加XAP的容量,也验证了有得必有失道理,鱼与熊掌应该如何取舍呢,先来看看这个实现方式吧。
991 0
|
Java Android开发
Android开发进阶:如何读写Androi“.NET研究”d文件
  Android主要有四大主要组件组成:Activity、ContentProvider、Service、Intent组成。Android文件的运行主要需要读写四大组件的文件。本文将介绍如何读写Android文件,希望对正在进行Android开发的朋友有所帮助。
1116 0