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

相关文章
解决删除文件时出现“该项目不在XX中,请确认该项目的位置然后重试”的提示
近期在删除文件夹的时候,出现了这个“该项目不在XX中,请确认该项目的位置然后重试”的提示,实际上这个文件(夹)就在那里,死活都删不掉,win10系统重启之后删除都不行的
10511 0
|
Web App开发 Python
Python实现简单的HTTP服务器(支持文件上传下载)
1、python内置模块 SimpleHTTPServer  (支持下载功能) 在对应的工作目录下,运行命令python -m SimpleHTTPServer 即可把当前目录下以共享服务的形式共享出去。
11706 2
|
存储 Python 内存技术
什么是文件?
什么是文件?
811 0
如何注册和申请阿里云域名?
在阿里云万网注册域名之前,你需要有阿里云账号,如果有账号可以忽略本步骤继续往下看
932 0
|
JavaScript 前端开发
【已解决】nodejs项目中报错:Cannot use import statement outside a module
nodejs项目中报错:Cannot use import statement outside a module
1450 0
|
机器学习/深度学习 人工智能 编解码
AI运动:阿里体育端智能最佳实践
过去一年,阿里体育技术团队在端智能方面不断探索,特别在运动健康场景下实现了实践落地和业务赋能,这就是AI运动项目。AI运动项目践行运动数字化的理念,为运动人口的上翻提供了重要支撑,迈出了阿里体育端智能运动领域的第一步,为用户带来了更加有趣的新颖玩法。上线以来,项目受到了广泛关注。
AI运动:阿里体育端智能最佳实践
|
存储 缓存 运维
从零开始入门 K8s | 调度器的调度流程和算法介绍
Kubernetes 作为当下最流行的容器自动化运维平台,以声明式实现了灵活的容器编排,本文以 v1.16 版本为基础详细介绍了 K8s 的基本调度框架、流程,以及主要的过滤器、Score 算法实现等,并介绍了两种方式用于实现自定义调度能力。
从零开始入门 K8s | 调度器的调度流程和算法介绍
新版直播OBS操作手册
云栖社区直播频道改版啦!新版直播OBS操作速速Get!
12611 1
新版直播OBS操作手册
|
缓存 前端开发 NoSQL
悟空CRM-11.0正式开源发布!
悟空CRM-基于Spring Cloud Alibaba微服务架构 +vue ElementUI的前后端分离CRM系统
5883 0
悟空CRM-11.0正式开源发布!