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寫的事件處理函式是很簡單的。看下這個例子吧:
<?xml version="1.0"?>
這個簡單的layout檔案所做的事和上面的c++**是一樣的。
cegui 8 Lua訊息處理入門
cegui 8 lua訊息處理入門 把gui的訊息處理從 中分離出來,並交給lua指令碼處理,這樣可以給你的介面帶來很大的靈活性.gui 的相關地東西可以在測試期間很輕鬆的修改.lua中的負責處理訊息的東西其實只不過是普普通通的只帶乙個引數的lua函式而已.若想用它作事件 處理函式,你必須先在系統中...
windows程式與vc訊息處理入門概念
while getmessage msg,winmain函式中的迴圈,整個應用程式生存期由getmessage的返回值決定,當其返回0 即wm quit訊息 即結束應用程式。視窗的生成由主函式中呼叫createwindow api函式實現 關閉視窗產生wm close由defwindowproc清除...
C 異常處理入門
先看如下 void test02 當你在main 中呼叫test02 時,很明顯會出現如下錯誤 因為除數不能為0,所以執行a b時就會引發錯誤,然後程式就自動停止了。有無錯誤就停止,這到沒什麼,關鍵是這種使用者體驗不是很好,你想一下,當程式執行好好的時候,遇到錯誤,就彈出這麼乙個視窗,然後程式就終止...