閱讀118 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

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

最後更新:2017-04-02 06:51:29

  上一篇:go HGE 係列教材(7) --- 使用 Helper Classes
  下一篇:go hgeSprite類