• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            visualfc

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              42 隨筆 :: 0 文章 :: 119 評(píng)論 :: 0 Trackbacks
              原創(chuàng) visualfc
               WTL的應(yīng)用程序向?qū)В↙UA版)使用IupLua編寫,本文將對(duì)其源代碼作一下簡(jiǎn)要說(shuō)明,并分析了該向?qū)У亩嗾Z(yǔ)言界面處理機(jī)制。
               WTL的應(yīng)用程序向?qū)г创a可以從 http://code.google.com/p/visualfc/downloads/list下載。下面對(duì)其作一下簡(jiǎn)要說(shuō)明。
               
            一、開(kāi)發(fā)環(huán)境:
                本向?qū)ч_(kāi)發(fā)環(huán)境是Lua for Windows,該項(xiàng)目地址為:http://luaforwindows.luaforge.net/
                wiz_main.wlua是向?qū)е魑募褂眉兾谋靖袷骄帉憽?br>    wiz_chs.wlua是中文向?qū)В跏蓟酥形慕缑婧笳{(diào)用wiz_main.wlua
                resource目錄為向?qū)褂玫闹形馁Y源文件和圖片
                Template目錄為應(yīng)用程序向?qū)0迥夸洠瑥腤TL80發(fā)行包中獲取并增加部分功能。

            二、向?qū)Э丶?br>    IupLua當(dāng)前版本(2.7)未提供向?qū)Э丶晕沂褂肐upLua編寫了一個(gè)向?qū)Э丶T创a位于iup\iupwizard.lua 文件中。

            三、Iup的id擴(kuò)展:
                這個(gè)在以前文章中有過(guò)介紹,僅舉例說(shuō)明 iup.button{title="ok",id="btn_id"},這樣可以直接引用btn_id來(lái)表示此button,源碼位于iup\iupid.lua中。

            四、vswizard.dll文件
               主要提供了分析Template目錄下模板文件的功能以及一些輔助函數(shù)供LUA使用。
               這是從VFC的WTL向?qū)е幸浦策^(guò)來(lái),源碼位于source\iup_vswizard目錄下
               其中l(wèi)uabind目錄為自己寫的一個(gè)c++到lua的簡(jiǎn)單綁定。
             
            五、絕對(duì)路徑
               我發(fā)現(xiàn)在Lua中很難獲取lua文件的絕對(duì)路徑,最后我使用了在vswizard.dll中導(dǎo)出get_module_path 函數(shù)的辦法以供lua模塊使用,如果誰(shuí)有更簡(jiǎn)便的方法望告之以加以改進(jìn)。

            六、多語(yǔ)言界面處理:
               Iup目前版本不支持UNICODE,但可以支持代碼頁(yè)。本向?qū)У亩嗾Z(yǔ)言處理采用了lua的表方式進(jìn)行處理,在lua源文件中需要顯示字符串的地方,使用ui("Sample string")的來(lái)取代"Sample string"。
               通過(guò)resource\build_lang.lua這個(gè)多語(yǔ)言生成工具,可以從lua源文件中直接提取ui("..."),并生成lang_chs.lua供翻譯使用,當(dāng)修改了向?qū)е械膗i字符串后,重新運(yùn)行build_lang.lua,取可重新提取ui("...")字符串,并且不會(huì)影響到已經(jīng)翻譯好的字符串。
               我截取了resource\lang_chs.lua部分源代碼,該文件通過(guò)build_lang.lua自動(dòng)生成。
            local lang = {}
            lang[
            "Project Name"= "項(xiàng)目名稱"
            lang[
            "Location"= "本地目錄"

            --ui("test str")
            function ui(str)
                
            if lang[str] ~= nil and lang[str] ~= "" then
                    
            return lang[str]
                
            else
                    
            return str
                end
            end
               啟用中文界面的wiz_main.wlua文件源碼如下:
            require "vswizard"

            local app_path 
            = vswizard.get_module_path()
            local_lang 
            = string.upper(vswizard.get_local_lang())

            if local_lang == "CHS" then
                dofile(app_path..
            "\\Resource\\lang_chs.lua")
            end

            dofile(app_path..
            "\\wiz_main.wlua")
               如果當(dāng)前語(yǔ)言為中文則加載lang_chs.lua文件并獲得了 ui 函數(shù),在wiz_main.wlua中判斷是否已經(jīng)獲取了ui函數(shù),如果沒(méi)有則使用源字符串輸出。
            local ui = ui or function(str) return str end
               最后可以看一下build_lang.lua源代碼,從中可以發(fā)現(xiàn)使用LUA來(lái)作此類工具非常的容易。
            function make_file(name, out_name)
                file 
            = io.open(name,"r")
                assert(file,
            "Error to load File"..name)

                s 
            = file:read("*all")
                words 
            = {}
                saves 
            = {}
                
            for w in string.gmatch(s,"ui%s-%(%s-(\".-\")%s-%)"do
                    
            if words[w] == nil then
                        saves[#saves
            +1= w
                        words[w] 
            = [[""]]
                    end
                end

                file:close()

                file 
            = io.open(out_name,"r")
                old = ""
                
            if file then
                    old 
            = file:read("*all")
                end
             
               for w,w1 in string.gmatch(old,"lang%[(\".-\")%]%s-=%s-(\".-\")"do
                    
            if w1 ~= "" then
                        words[w] 
            = w1
                    end
                end

                file 
            = io.open(out_name,"w")
                assert(file,
            "Error to write file"..out_name)

                file:write("-- lang file for "..name.."\n\n")
                file:write(
            "local lang = {}\n")
                
            for k,v in ipairs(saves) do
                    file:write(
            string.format("lang[%s] = %s\n",v,words[v]))
                end
                file:write(
            [[

            --ui("test str")
            function ui(str)
                
            if lang[str] ~= nil and lang[str] ~= "" then
                    
            return lang[str]
                
            else
                    
            return str
                end
            end

            ]])
            end

            make_file(
            "..\\wiz_main.wlua","lang_chs.lua")


            posted on 2009-01-07 13:21 visualfc 閱讀(2419) 評(píng)論(0)  編輯 收藏 引用 所屬分類: WTLLUA
            久久99国产精品二区不卡| 久久精品免费全国观看国产| 久久最近最新中文字幕大全| 国产日产久久高清欧美一区| 中文字幕久久亚洲一区| 国产毛片欧美毛片久久久| 曰曰摸天天摸人人看久久久| 欧美精品国产综合久久| 青青草国产精品久久| 超级97碰碰碰碰久久久久最新 | 老色鬼久久亚洲AV综合| 免费精品99久久国产综合精品| 久久免费视频6| 久久99热狠狠色精品一区| 久久久久久久波多野结衣高潮| 久久久91精品国产一区二区三区| 亚洲七七久久精品中文国产 | 久久久这里只有精品加勒比| 国产精品99久久久久久宅男 | 久久久无码精品亚洲日韩软件| 日韩精品久久久肉伦网站| 午夜精品久久久久久影视riav| 成人a毛片久久免费播放| 97热久久免费频精品99| 性做久久久久久久| 精品久久久久久国产| 久久久亚洲AV波多野结衣| 精品人妻伦九区久久AAA片69| 久久免费99精品国产自在现线| 国内精品久久久久久久影视麻豆| 亚洲午夜精品久久久久久人妖| 97久久超碰国产精品旧版| 久久国产热精品波多野结衣AV| 久久夜色精品国产噜噜亚洲AV| 久久亚洲精精品中文字幕| 久久精品国产亚洲av影院| 色偷偷偷久久伊人大杳蕉| 狠狠色丁香久久婷婷综| 99久久99久久精品国产| 日韩美女18网站久久精品| 久久人人爽人人人人爽AV|