cegui 8
lua訊息處理入門
把gui的訊息處理從**中分離出來,並交給lua指令碼處理,這樣可以給你的介面帶來很大的靈活性.gui
的相關地東西可以在測試期間很輕鬆的修改.
lua中的負責處理訊息的東西其實只不過是普普通通的只帶乙個引數的lua函式而已.若想用它作事件
處理函式,你必須先在系統中註冊它.所以除非你在初始化指令碼中載入他們,你必須在處理相應事件之前
載入指令碼檔案
有2種載入指令碼檔案的方法:使用c++**或者在初始化指令碼中使用lua**,由於lua函式和相應的c++
函式一一對應,這2種方法看起來很像.
cegui::system::executescriptfile(const cegui::string &filename,const cegui::string& resourcegroup="");
顯然這個函式有兩個引數:檔名和資源組。大多數情況下,可以不用管最後乙個引數。
通過cegui指定的lua指令碼模組呼叫此函式就可以執行指定的lua指令碼檔案。這意味著:你的程式可以訪問指令碼中檔案定義的函式等所有東西了,當然,被定義為區域性範圍的除外。
例如,用c++可以這麼寫:
cegui::system::getsingleton().executescriptfile(
"../datafiles/scripts/guiscript.lua"
);
如果有錯誤產生,它會丟擲乙個異常。
用lua可以這麼寫:
cegui.system:getsingleton():executescriptfile(
"../datafiles/scripts/guiscript.lua"
)
指令碼檔案中的全域性**也將被執行,所以要注意對每次執行進行必要的處理(使用乙個計數器fx)。
註冊事件到lua函式
既然我們已經載入了指令碼檔案,下一步就可以繫結事件到指令碼處理函式上了.
繫結lua函式的函式與繫結c++函式的函式名稱不同。
event::connection subscribescriptedevent(
const
string& name,
const
string& subscriber_name);
引數name是你要繫結的事件。引數subscriber_name為處理此事件的lua函式的函式名。
呼叫完此函式後,指定的lua函式就將成為那個事件的處理函式。而且它執行起來和c++版本的函式幾乎一模一樣(當然,不同的是:它是lua指令碼)。
如下是繫結pushbutton單擊事件到乙個lua函式上的**片段:
cegui::pushbutton* pb = (cegui::pushbutton*)cegui::windowmanager::getsingleton().createwindow(
"taharezlook/button"
,"lua_powered_button"
);
pb->setsize(cegui::size(0.1f,0.1f));
pb->setposition(cegui::point(0.1f,0.1f));
pb->subscribescriptedevent("clicked"
,"luabtn_clicked"
);
cegui::system::getsingleton().getguisheet()->addchildwindow(pb);
這段**將建立乙個簡單的taharezlook按鈕,把它的clicked事件繫結到lua函式luabtn_clicked中,然後把它新增到當前的gui。
現在,我們看一下那個lua事件處理函式:
function luabtn_clicked(e)
local we = cegui.towindoweventargs(e)
we.window:settext("handled from lua"
);
end
它使得當按鈕被按下時,它的文字會變成「handled from lua」。
我們使用了乙個公用的函式:
cegui.towindoweventargs(e)
從它的名字可以看出:它把eventargs引數轉換為windoweventargs型別。其他的eventargs型別也有類似的轉換函式。
在 layout檔案中註冊
lua事件處理函式 在
layout檔案中繫結用
lua寫的事件處理函式是很簡單的。看下這個例子吧:
<?
xmlversion
="1.0"
?>
<
guilayout
>
<
window
type
="taharezlook/button"
name
="lua_powered_button"
>
<
property
name
="width"
value
="0.1"
/>
<
property
name
="height"
value
="0.1"
/>
<
property
name
="xposition"
value
="0.1"
/>
<
property
name
="yposition"
value
="0.1"
/>
<
event
name
="clicked"
function
="luabtn_clicked"
/>
window
>
guilayout
>
這個簡單的layout檔案所做的事和上面的c++**是一樣的。
Lua訊息處理入門
lua訊息處理入門 把gui的訊息處理從 中分離出來,並交給lua指令碼處理,這樣可以給你的介面帶來很大的靈活性.gui 的相關地東西可以在測試期間很輕鬆的修改.lua中的負責處理訊息的東西其實只不過是普普通通的只帶乙個引數的lua函式而已.若想用它作事件 處理函式,你必須先在系統中註冊它.所以除非...
windows程式與vc訊息處理入門概念
while getmessage msg,winmain函式中的迴圈,整個應用程式生存期由getmessage的返回值決定,當其返回0 即wm quit訊息 即結束應用程式。視窗的生成由主函式中呼叫createwindow api函式實現 關閉視窗產生wm close由defwindowproc清除...
lua用UTF 8處理漢字
lua用utf 8處理漢字 utf8的編碼規則 1.字元的第乙個位元組範圍 0x00 0x7f 0 127 或者 0xc2 0xf4 194 244 utf8 是相容 ascii 的,所以 0 127 就和 ascii 完全一致 2.0xc0,0xc1,0xf5 0xff 192,193 和 245...