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