青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Error

C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
  217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks

#

最后我用的辦法是:SW_SHOWNORMAL  BringWindowToTop


SetForegroundWindow
 BringWindowToTop

SwitchToThisWindow
typedef void (WINAPI *PROCSWITCHTOTHISWINDOW) (HWND, BOOL); 
PROCSWITCHTOTHISWINDOW SwitchToThisWindow; 
HMODULE hUser32 = GetModuleHandle("user32"); 
SwitchToThisWindow = (PROCSWITCHTOTHISWINDOW)GetProcAddress(hUser32, 
"SwitchToThisWindow"); 

hCurWnd = ::GetForegroundWindow();
dwMyID = ::GetCurrentThreadId();
dwCurID = ::GetWindowThreadProcessId(hCurWnd, NULL);
::AttachThreadInput(dwCurID, dwMyID, TRUE);
::SetForegroundWindow(m_hWnd);
::AttachThreadInput(dwCurID, dwMyID, FALSE);


  this->ShowWindow(SW_SHOWNA);//簡單的顯示主窗口完事兒
            this->SetActiveWindow();
            this->SetForegroundWindow();   
            //this->SetWindowPos(this,LOWORD(lParam),HIWORD(lParam),c.Width(),c.Height(),SWP_NOACTIVATE);
            this->BringWindowToTop();

SW_HIDE 隱藏窗口,激活另一窗口

SW_MINIMIZE 最小化窗口,激活另一窗口

SW_RESTORE 用原來的大小和位置顯示一個(gè)窗口,同時(shí)令其進(jìn)入活動(dòng)狀態(tài)

SW_SHOW 用當(dāng)前的大小和位置顯示一個(gè)窗口,同時(shí)令其進(jìn)入活動(dòng)狀態(tài)

SW_SHOWMAXIMIZED 最大化窗口,并將其激活

SW_SHOWMINIMIZED 最小化窗口,并將其激活

SW_SHOWMINNOACTIVE 最小化一個(gè)窗口,但不改變活動(dòng)窗口

SW_SHOWNA 用當(dāng)前的大小和位置顯示一個(gè)窗口,不改變活動(dòng)窗口

SW_SHOWNOACTIVATE 用最近的大小和位置顯示一個(gè)窗口,同時(shí)不改變活動(dòng)窗口

SW_SHOWNORMAL 與SW_RESTORE相同

posted @ 2014-09-25 09:52 Enic 閱讀(3362) | 評論 (0)編輯 收藏

gcc
        GNU   C/C++編譯器也可以正確支持wchar_t字符和字符串,但是源代碼的保存格式必須符合
下面條件:
        一、源代碼文件的保存編碼必須是UTF-8
        二、UTF-8編碼格式的源代碼文件,不能有BOM標(biāo)志頭。
        只有源代碼文件符合上面兩個(gè)條件,gcc才會(huì)正確支持wchar_t字符和字符串。如果不符合
上面兩個(gè)條件的話,有可能會(huì)編譯出錯(cuò),有可能會(huì)產(chǎn)生錯(cuò)誤的wchar_t字符和字符串。
        gcc在Windows平臺(tái)下,wchar_t是16位類型,在Linux平臺(tái)下,wchar_t是32位類型。
       
        另外,GCC提供了以下的參數(shù)開關(guān)來支持其它文字編碼的源文件:
        (a)-finput-charset=charset
            gcc在默認(rèn)情況下,總是假設(shè)源代碼的編碼是UTF-8,如果是其它編碼的源代碼文件,
            源代碼里面又用到了wchar_t的類型,則可以使用-finput-charset=charset這個(gè)參數(shù)
            來實(shí)現(xiàn)。
            例如通常使用GBK編碼的源代碼可以假如參數(shù):-finput-charset=GBK
         (b)-fwide-exec-charset=charset
            默認(rèn)情況下,gcc在Windows平臺(tái)下,寬字符串串常量的每個(gè)字符是16位UTF-16類型,
            在Linux平臺(tái)下,寬字符串串常量的每個(gè)字符是32位UTF-32類型,
            使用這個(gè)參數(shù),可以改變寬字符串串常量的類型。
            例如在x86的機(jī)器環(huán)境,Linux操作系統(tǒng)下,要使例如 L"漢字" 編譯后保存為UTF-16
            的字符串,則可以使用 -fwide-exec-charset=UTF-16LE 
posted @ 2014-09-24 16:49 Enic 閱讀(918) | 評論 (0)編輯 收藏

rundll32.exe編輯

本詞條缺少信息欄,補(bǔ)充相關(guān)內(nèi)容使詞條更完整,還能快速升級,趕緊來編輯吧!
rundll32.exe用于在內(nèi)存中運(yùn)行DLL文件,它們會(huì)在應(yīng)用程序中被使用。這個(gè)程序?qū)δ阆到y(tǒng)的正常運(yùn)行是非常重要的。注意:rundl132.exe和rundll32.exe相似。但是rundl132.exe是W32.Miroot.Worm病毒。該病毒允許攻擊者訪問你的計(jì)算機(jī),竊取密碼和個(gè)人數(shù)據(jù)。對該文件的建議是立即刪除。

顧名思義,“執(zhí)行32位的DLL文件”。它的作用是執(zhí)行DLL文件中的內(nèi)部函數(shù),這樣在進(jìn)程當(dāng)中,只會(huì)有 Rundll32.exe,而不會(huì)有DLL后門的進(jìn)程,這樣,就實(shí)現(xiàn)了進(jìn)程上的隱藏。如果看到系統(tǒng)中有多個(gè)Rundll32.exe,不必驚慌,這證明用 Rundll32.exe啟動(dòng)了多少個(gè)的DLL文件。當(dāng)然,這些Rundll32.exe執(zhí)行的DLL文件是什么,我們都可以從系統(tǒng)自動(dòng)加載的地方找到。
我來介紹一下Rundll32.exe這個(gè)文件,意思上邊已經(jīng)說過,功能就是以命令行的方式調(diào)用動(dòng)態(tài)鏈接程序庫。系統(tǒng)中還有一個(gè) Rundll.exe文件,他的意思是“執(zhí)行16位的DLL文件”,這里要注意一下。再來看看Rundll32.exe使用的函數(shù)原型[1] 
Void CALLBACK FunctionName (HWND hwnd,HINSTANCE hinst,LPTSTR lpCmdLine,Int nCmdShow);
其命令行下的使用方法為:Rundll32.exe DLLname,Functionname [Arguments]
DLLname為需要執(zhí)行的DLL文件名;Functionname為前邊需要執(zhí)行的DLL文件的具體引出函數(shù);[Arguments]為引出函數(shù)的具體參數(shù)。
posted @ 2014-08-27 09:42 Enic 閱讀(640) | 評論 (0)編輯 收藏

set _NT_SYMBOL_PATH = symsrv*D:\win_Symbols*http://msdl.microsoft.com/download/symbols

gflags -i GameManager.exe +
gflags-i GameManager.exe +
7152 GameManager.exe   DUIPlazaWnd
umdh -p:7152 -f:1.txt
umdh -p:7152 -f:2.txt
UMDH -d 1.txt 2.txt >> 1-2.txt


gflags /i GameManager.exe +ust 
umdh -p:7152 -f:1.txt
umdh -p:7152 -f:2.txt
UMDH -d 1.txt 2.txt >> 1-2.txt
posted @ 2014-08-26 19:05 Enic 閱讀(164) | 評論 (0)編輯 收藏

setlocale(LC_ALL, "");

很大一快知識(shí)點(diǎn),暫時(shí)不想做深入研究
http://www.360doc.com/content/12/1202/22/3398926_251650422.shtml
posted @ 2014-08-08 11:33 Enic 閱讀(292) | 評論 (0)編輯 收藏

客戶端架構(gòu)設(shè)計(jì)的簡單總結(jié)
原文連接:http://m.shnenglu.com/weiym/archive/2014/07/26/207819.html
我們知道,客戶端是相對服務(wù)端而言的,客戶端程序相對普通應(yīng)用程序,主要是增加了網(wǎng)絡(luò)通訊功能。在這個(gè)移動(dòng)和云存儲(chǔ)的年代,大部分終端應(yīng)用程序都有網(wǎng)絡(luò)通訊功能, 所以都可以稱為客戶端。常見的客戶端如瀏覽器,IM客戶端, 網(wǎng)絡(luò)會(huì)議客戶端,郵件客戶端,微博和微信客戶端等...

通過觀察,我們會(huì)發(fā)現(xiàn)所有的客戶端基本是大同小異,都會(huì)包括一些相同的功能組件, 下面簡單例舉下:
通訊協(xié)議層

既然客戶端都有網(wǎng)絡(luò)功能,就會(huì)涉及到通訊方式和數(shù)據(jù)格式以及協(xié)議, 這三者不是完全獨(dú)立,而是有機(jī)統(tǒng)一的。

首先說通訊方式,常見的通訊方式包括TCP,UDP, P2P和http(s), 很多時(shí)候我們不會(huì)用單一的通訊方式,而是多種通訊方式的結(jié)合。比如說TCP端口被封,走不通時(shí),我們會(huì)轉(zhuǎn)成嘗試http(s)。IM中聊天文本走的是TCP, 由服務(wù)器轉(zhuǎn)發(fā),但是2個(gè)客戶端之間的文件傳輸我們可能走的又是P2P了, 多個(gè)人之間的語音聊天, 我們走的又是UDP了。

其次說數(shù)據(jù)格式,常見的數(shù)據(jù)格式包括二進(jìn)制編碼,開源序列化協(xié)議和文本格式。
二進(jìn)制一般是自定義的私有格式,通常對數(shù)值,我們會(huì)轉(zhuǎn)成大頭端,對字符串我們會(huì)用UTF8 編碼,因?yàn)闆]有冗余數(shù)據(jù),它的優(yōu)點(diǎn)是不會(huì)浪費(fèi)帶寬;主要缺點(diǎn)是有硬編碼的味道,不好擴(kuò)充。
開源序列化協(xié)議這里主要是指google的protocal buffer,  現(xiàn)在很多公司都在用, 很多人基于它開發(fā)了自己的RPC框架。主要優(yōu)點(diǎn)是數(shù)據(jù)小,使用簡單而高效。
文本格式主要是指xml和json. 相對來說xml比較清晰和容易擴(kuò)充,但是冗余數(shù)據(jù)比較多。json借助javascript對它語言層次的支持,感覺主要是前端人員使用的比較多。

最后再說協(xié)議,  協(xié)議和我們的應(yīng)用相關(guān)聯(lián)。比如郵件客戶端,當(dāng)然是走SMTP和POP3了; IM客戶端的話,一般走XMPP了;  網(wǎng)絡(luò)會(huì)議的話,可以走ITU的T.120協(xié)議, 也可以RFC 6501定義的XCON, 信令走SIP, 數(shù)據(jù)走RTP等。

通信協(xié)議層是整個(gè)客戶端網(wǎng)絡(luò)事件驅(qū)動(dòng)的引擎,它可能會(huì)比較簡單,也可能會(huì)很復(fù)雜。如果是基于XMPP的IM, 它可能會(huì)比較簡單,因?yàn)榛旧现恍枰粚游谋緟f(xié)議的封包和解包就可以了。 當(dāng)如果是基于T.120網(wǎng)絡(luò)會(huì)議客戶端,就會(huì)比較復(fù)雜,它數(shù)據(jù)包走的自定義的二機(jī)制格式,按照T.120協(xié)議的建議, 在通訊協(xié)議層又分了3層:TP, MCS和GCC。TP層主要封裝數(shù)據(jù)傳輸?shù)姆绞? 可以讓上層無差別的區(qū)分TCP和http(s)。 MCS層主要提供多點(diǎn)傳輸功能, 它抽象出通道(channel)這個(gè)概念, 讓不同session的數(shù)據(jù)進(jìn)行邏輯隔離, 上層用戶可以同時(shí)加入不同的通道來進(jìn)行一對一和一對多的數(shù)據(jù)收發(fā),并且通道中的數(shù)據(jù)有不同的優(yōu)先級, 還有令牌這個(gè)機(jī)制。我們也可以在MCS層對數(shù)據(jù)進(jìn)行加密和壓縮, 還可以對上層的大數(shù)據(jù)包進(jìn)行切包等。 GCC層主要封裝會(huì)議的最基本邏輯,比如創(chuàng)建會(huì)議和加入session數(shù)據(jù)包的格式封裝等, 讓上層可以通過API調(diào)用而不用關(guān)心協(xié)議要求的數(shù)據(jù)包格式。不同的數(shù)據(jù)包會(huì)工作在不同的層次, 比如心跳包可能在底層TP層就被攔截了,它不要再往上層發(fā),因?yàn)樯厦娌挥藐P(guān)心這個(gè); 而有些數(shù)據(jù)包,則需要從底層往上層按照整個(gè)協(xié)議棧層層轉(zhuǎn)發(fā),當(dāng)然每層都會(huì)剝離掉自己的協(xié)議頭, 直至上層用戶數(shù)據(jù)到達(dá)它的最終用戶。

總之,通訊協(xié)議層封裝了客戶端和服務(wù)端的通訊方式及協(xié)議格式, 讓上層用戶不用關(guān)心底層的通信機(jī)制, 而只關(guān)注應(yīng)用的接口事件。理論上我們可以在上層應(yīng)用不做大調(diào)整的前提下,直接將網(wǎng)絡(luò)會(huì)議客戶端中的T.120協(xié)議成基于SIP的XCON。
功能組件

一個(gè)客戶端程序通常是由很多功能模塊組成,模塊按功能來說可以分為基礎(chǔ)組件和應(yīng)用組件。

基礎(chǔ)組件為應(yīng)用組件提供的基礎(chǔ)設(shè)施,基礎(chǔ)組件是可以在不同的項(xiàng)目中重復(fù)使用的(比如界面控件庫,2D渲染引擎Skia, 跨平臺(tái)的網(wǎng)絡(luò)和線程庫等)。 
應(yīng)用組件通常和我們當(dāng)前的特定應(yīng)用程序相關(guān),比如我們的網(wǎng)絡(luò)會(huì)議客戶端包含的桌面共享模塊, 文檔共享模塊,視頻音頻模塊,文本聊天模塊等。

應(yīng)用模塊本身分為帶界面和無界面兩種情況, 帶界面的情況下我們通常會(huì)給組件提供一個(gè)容器窗口的句柄, 讓組件自己在內(nèi)部組織自己的界面。這種帶界面的組件通常會(huì)為邏輯和界面的分離帶來麻煩,在Window上實(shí)現(xiàn)一些半透明和動(dòng)畫效果也很難。 比如我們想提供跨平臺(tái)的SDK來封裝邏輯,這時(shí)我們會(huì)更傾向讓應(yīng)用組件采用無界面的模式,組件在跨平臺(tái)層只封裝邏輯和提供數(shù)據(jù), 而把數(shù)據(jù)發(fā)到最上層界面層后再統(tǒng)一處理。

對功能組件我們的設(shè)計(jì)原則是盡量保持獨(dú)立和可復(fù)用,最好能以仿COM方式動(dòng)態(tài)升級而不用重新編譯, 另外組件之間要保持層次性,避免雙向或是循環(huán)依賴。
數(shù)據(jù)存儲(chǔ)

客戶端本身是處理和收發(fā)網(wǎng)絡(luò)數(shù)據(jù), 這里就涉及到對這些數(shù)據(jù)如何組織和存儲(chǔ)的問題。這個(gè)通常會(huì)根據(jù)客戶端的類型采用不同的處處理方式:
對于永久存儲(chǔ)的數(shù)據(jù),當(dāng)然是保存成文件或是存入數(shù)據(jù)庫,文件如xml, 數(shù)據(jù)庫如ACCESS,  SQL server, mysql等。
臨時(shí)數(shù)據(jù)當(dāng)然是存入內(nèi)存了,根據(jù)需要采用不同的數(shù)據(jù)結(jié)構(gòu), 組織格式如array,list, map, hashmap等。
還有一種是常見的數(shù)據(jù)保存方式是內(nèi)存數(shù)據(jù)庫,最常見是SQLite了, 內(nèi)存數(shù)據(jù)庫既能高效的分類保存大量數(shù)據(jù), 又可以直接用基于SQL語句進(jìn)行查詢和處理, 比如foxmail客戶端就是用SQLite存儲(chǔ)的郵件信息。
還有一種是跨進(jìn)程共享的數(shù)據(jù),我們一般當(dāng)然是內(nèi)存映射文件了。比如我們有一個(gè)實(shí)時(shí)顯示log的工具, 我們通常會(huì)在對方應(yīng)用程序里分配共享內(nèi)存的內(nèi)存映射文件,所有的log都寫到里面,然后在log工具程序里讀取和顯示。
當(dāng)然還有一些數(shù)據(jù)可能存到網(wǎng)上去的, 常見的比如我們的云筆記, 這時(shí)數(shù)據(jù)分服務(wù)端數(shù)據(jù)和本地cache。

對于數(shù)據(jù)存儲(chǔ)我們的設(shè)計(jì)原則是根據(jù)需要,選擇簡單高效的方式。比如我們在設(shè)計(jì)網(wǎng)絡(luò)會(huì)議客戶端時(shí)曾討論要不要引入SQLite, 理想情況是引入內(nèi)存數(shù)據(jù)庫后各個(gè)組件和上層應(yīng)用的數(shù)據(jù)都可以統(tǒng)一存儲(chǔ),采用數(shù)據(jù)驅(qū)動(dòng)的方式,可以很方便的跟蹤整個(gè)客戶端的運(yùn)行情況。但后來發(fā)現(xiàn)這種設(shè)計(jì)會(huì)把本來各自獨(dú)立的組件通過數(shù)據(jù)庫耦合在了一起,而且各組件的數(shù)據(jù)格式本身都很不要一樣, 很難統(tǒng)一存儲(chǔ), 另外很多數(shù)據(jù)實(shí)際也只是臨時(shí)數(shù)據(jù), 沒必要把簡單的時(shí)間做復(fù)雜了。
客戶端框架

客戶端框架一般有兩個(gè)作用:一是把所有的功能組件組織起來,進(jìn)行統(tǒng)一的管理和展現(xiàn); 二是實(shí)現(xiàn)整個(gè)客戶端的主界面。客戶端框架在協(xié)調(diào)各個(gè)組件時(shí), 要注意避免讓組件之間產(chǎn)生雙向依賴, 而是應(yīng)該讓組件把事件通知給框架后由框架統(tǒng)一協(xié)調(diào)和處理, 所以客戶端框架通常是整個(gè)客戶端邏輯最復(fù)雜的部分。 一個(gè)好的客戶端框架,通常會(huì)采用插件方式設(shè)計(jì),可以動(dòng)態(tài)插拔需要的組件。最好是可以根據(jù)服務(wù)端的配置, 動(dòng)態(tài)下載和更新所需要的插件。

對于客戶端框架, 我們的設(shè)計(jì)原則是低耦合和可擴(kuò)展。基本上所有下層組件的改動(dòng)都會(huì)影響到我們的客戶端框架,客戶的很多新需求和新組件也會(huì)導(dǎo)致框架產(chǎn)生壞味道, 這里我們設(shè)計(jì)時(shí)就要考慮如何讓客戶端框架能及時(shí)的適應(yīng)這些變化。
界面庫

客戶端肯定會(huì)有界面,在Windows平臺(tái)上,現(xiàn)在的界面大致分為以下幾類:
基于Windows原始窗口控件句柄的C++ native 客戶端, 基于.net的winform客戶端,基于.net的WPF客戶端,基于C++的DirectUI客戶端, 以嵌入瀏覽器(如webkit)方式實(shí)現(xiàn)的客戶端, 還有一類是基于Xaml的Metro客戶端。

對于企業(yè)級大型安裝應(yīng)用,主要考慮的是開發(fā)效率,所以客戶端還是以.net為主; 但是對于互聯(lián)網(wǎng)企業(yè), 更多的是要求客戶端精簡而高效, 所以還是以C++為主。 這里就設(shè)及到C++的兩種界面庫, 一種是基于windows窗口句柄和控件自繪機(jī)制的界面庫,還有一中是基于DirectUI的界面庫, 現(xiàn)在大一點(diǎn)的公司基本上都有自己的DirectUI界面庫。基于修改Webkit方式實(shí)現(xiàn)的界面庫可以通過Canvas和SVG動(dòng)畫等方式實(shí)現(xiàn)一些很炫的效果, 但是它和標(biāo)準(zhǔn)程序的用戶體驗(yàn)還是有一定差距:一來web實(shí)現(xiàn)的控件跟Windows標(biāo)準(zhǔn)控件有很大不同, 二來web的流式布局和應(yīng)用程序的網(wǎng)格布局也不一樣。

對于界面,個(gè)人覺得這個(gè)東西變化實(shí)在太快了,所以我覺得應(yīng)該盡量用界面和邏輯相分離的方式組織代碼。
總結(jié)

對于客戶端架構(gòu)設(shè)計(jì),個(gè)人覺得最大的原則就分層設(shè)計(jì), 每層都封裝一個(gè)概念并保持獨(dú)立, 同時(shí)根據(jù)依賴倒置的原則, 站在上層客戶的角度提供接口。軟件工程里面的一條黃金定律:“任何問題都可以通過增加一個(gè)間接層來解決。
posted @ 2014-07-30 18:41 Enic 閱讀(216) | 評論 (0)編輯 收藏

http://www.cmake.org/Bug/view.php?id=13774
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=89595d6b
http://www.cmake.org/cmake/help/v2.8.10/cmake.html#variable:CMAKE_VS_PLATFORM_TOOLSET
cmake ../ -G"Visual Studio 11" -Tv110_xp
cmake-gui貌似還不知道怎么直接生成,這是CMAKE_VS_PLATFORM_TOOLSET貌似沒用,但是可以先用命令行生成,然后在用gui修改其他變量?
posted @ 2014-06-27 14:12 Enic 閱讀(1579) | 評論 (1)編輯 收藏

這樣完全只要關(guān)系邏輯了,別的都秒殺,只是代碼出錯(cuò)了,多半要用肉眼看,,,
再有就是用luabind class的細(xì)節(jié),還不了解
CTestClass =
{
m_TestVal = 0,
m_funcTest = nul
}
function CTestClass:SetValue(v)
self.m_TestVal = v;
end
function CTestClass:TestShow()
print(self.m_TestVal);
end
function CTestClass:SetTestFunc(func)
self.m_funcTest = func;
end
function CTestClass:CallTestFunc()
self.m_funcTest();
end
function CTestClass:TestHandleFunc(msg)
print(msg)
end
t1 = CTestClass;
t1:SetValue(123321);
t1:TestShow();
t1:SetTestFunc(
function ()
t1:TestHandleFunc('TestHandleFunc')
end);
t1:CallTestFunc();
posted @ 2014-06-26 10:58 Enic 閱讀(322) | 評論 (2)編輯 收藏

參考了:cegui 魔獸世界  迅雷  mygui
主要問題如下:
Q1: 控件的屬性是放到xml節(jié)點(diǎn)的屬性中,還是作為子節(jié)點(diǎn)。放到屬性中方便,但是xml太長,人眼看的時(shí)候費(fèi)勁,子節(jié)點(diǎn)會(huì)好很多。
Q2: 控件之間的父子關(guān)系是直接用xml的節(jié)點(diǎn)父子關(guān)系來表達(dá),還是和魔獸世界一樣允許parent="UIParent",這樣設(shè)置。我可能還需要“include”其他xml中定義的控件?
直接xml父子節(jié)點(diǎn):優(yōu)勢是關(guān)系簡單明了,缺陷是UI復(fù)雜以后堆積的xml文件太長,人眼也無法看明白了
魔獸世界:他們的做法可以分離每個(gè)控件出來,但是層次關(guān)系又不明朗了。
允許類似<Window></InsertControlByName name="ChirdControl" type="Type"></Window>這樣的特殊節(jié)點(diǎn),平衡兩者有優(yōu)劣勢。但是名字空間還是需要非常留意的點(diǎn)。
另外可以支持<ExportControls></Window name="ExportWnd"></ExportControls>,<InportControls></InportControl name="Import" type="Type" ImportFile="xxx.xml"><InportControls>
type屬性不必要,但是加上以后可以讓xml自校驗(yàn)?zāi)芰Ω鼜?qiáng)

解決名字沖突還是沒什么辦法。但是庫必須提供名字無關(guān)的控件消息綁定手段!允許全局重復(fù)名字的控件




<GUILayout version="4" >
    <Window type="Generic/Image" name="GameOverRoot" >
        <Property name="Area" value="{{0,0},{0,0},{1,0},{1,0}}" />
        <Property name="Image" value="HUDDemo/Filler" />
        <Property name="MaxSize" value="{{1,0},{1,0}}" />
        <Property name="AlwaysOnTop" value="True" />
        <Property name="ImageColours" value="tl:88888888 tr:88888888 bl:88888888 br:88888888" />
        <Window type="Generic/Image" name="GameOverImage" >
            <Property name="Area" value="{{0,0},{0.119444,0},{0,0},{0.519444,0}}" />
            <Property name="MaxSize" value="{{1,0},{1,0}}" />
            <Property name="AspectMode" value="Expand" />
            <Property name="AspectRatio" value="1.923" />
            <Property name="HorizontalAlignment" value="Centre" />
        </Window>
        <Window type="Generic/ImageButton" name="ButtonRestart" >
            <Property name="Area" value="{{0,0},{0.597222,0},{0.153906,0},{0.661111,0}}" />
            <Property name="HoverImage" value="HUDDemo/ButtonNormal" />
            <Property name="NormalImage" value="HUDDemo/ButtonNormal" />
            <Property name="PushedImage" value="HUDDemo/ButtonPressed" />
            <Property name="DisabledImage" value="HUDDemo/ButtonNormal" />
            <Property name="HorizontalAlignment" value="Centre" />
            <Window type="Generic/Label" name="LabelRestart" >
                <Property name="Area" value="{{0,0},{0.152778,0},{1,0},{1,0}}" />
                <Property name="Font" value="GreatVibes-22" />
                <Property name="Text" value="Restart" />
                <Property name="MaxSize" value="{{1,0},{1,0}}" />
                <Property name="NormalTextColour" value="FFFFFFFF" />
                <Property name="DisabledTextColour" value="FFFFFFFF" />
                <Property name="MousePassThroughEnabled" value="True" />
            </Window>
        </Window>
    </Window>
</GUILayout>



<Framename="EnterLeaveTest" parent="UIParent">

             <Size x="100" y="100" />

             <Anchors>

                    <Anchor point="CENTER"relativePoint="CENTER" relativeTo="UIParent" />

             </Anchors>

             <Layers>

                    <Layer level="BACKGROUND">

                           <Texture name="$parentIcon"file="Interface\Icons\Spell_ShadowWordPain" setAllPoints="true"/>

                    </Layer>

             </Layers>

             <Scripts>

                    <OnEnter>

                           ChatFrame1:AddMessage("++ 進(jìn)入窗體:" .. self:GetName())

                    </OnEnter>

                    <OnLeave>

                           ChatFrame1:AddMessage("-- 離開窗體:" .. self:GetName())

                    </OnLeave>

             </Scripts>

      </Frame>






<xlue>
<control class="BoltFox.MainMenu.Item">
<attr_def>
<attr name="SubMenuTemplate" type="string"/>
<attr name="Text" type="string"/>
</attr_def>
<method_def>
<SetContainer file="MainMenu.xml.lua" func="MainMenu_Item_SetContainer"/>
<PopupSubMenu file="MainMenu.xml.lua" func="MainMenu_Item_PopupSubMenu"/>
<DestroySubMenu file="MainMenu.xml.lua" func="MainMenu_Item_DestroySubMenu"/>
<SetEntered file="MainMenu.xml.lua" func="MainMenu_Item_SetEntered"/>
<SetText file="MainMenu.xml.lua" func="MainMenu_Item_SetText"/>
<GetText file="MainMenu.xml.lua" func="MainMenu_Item_GetText"/>
</method_def>
<event_def>
<OnSelected />
</event_def>
<objtemplate>
<children>
<obj id="root" class="LayoutObject">
<attr>
<left>0</left>
<top>0</top>
<width>father.width</width>
<height>father.height</height>
</attr>
<children>
<obj id="hoverBkg" class="FillObject">
<attr>
<left>0</left>
<top>0</top>
<width>father.width</width>
<height>father.height</height>
<visible>false</visible>
<filltype>singlecolor</filltype>
<srccolor>235,0,0,155</srccolor>
</attr>
<children>
<obj id="tosub" class="ImageObject">
<attr>
<left>10</left>
<top>4</top>
<width>father.width - 10</width>
<height>5</height>
<visible>false</visible>
<image>bitmap.right.triangle</image>
</attr>
</obj>
<obj id="text" class="TextObject">
<attr>
<left>10</left>
<top>3</top>
<width>father.width - 15</width>
<height>father.height - 6</height>
</attr>
</obj>
</children>
</obj>
</children>
</obj>
</children>
<eventlist>
<event name="OnMouseEnter" file="MainMenu.xml.lua" func="MainMenu_Item_OnMouseEnter"/>
<event name="OnMouseLeave" file="MainMenu.xml.lua" func="MainMenu_Item_OnMouseLeave"/>
<event name="OnLButtonDown" file="MainMenu.xml.lua" func="MainMenu_Item_OnLButtonDown"/>
<event name="OnInitControl" file="MainMenu.xml.lua" func="MainMenu_Item_OnInitControl"/>
</eventlist>
</objtemplate>
</control>



<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout" version="3.2.0">
    <Widget type="Window" skin="WindowC" position="20 20 170 135" layer="Info" name="Root">
        <Property key="Snap" value="true"/>
        <UserString key="ButtonSkin" value="Button"/>
        <Widget type="ImageBox" skin="ImageBox" position="5 5 50 50" name="Icon">
            <Property key="ImageResource" value="MessageBoxIcon"/>
            <Property key="ImageGroup" value="Icons"/>
        </Widget>
        <Widget type="TextBox" skin="TextBox" position="60 5 92 50" align="Stretch" name="Text">
            <Property key="TextAlign" value="Left VCenter"/>
        </Widget>
        <Widget type="Widget" skin="PanelEmpty" position="20 60 120 26" align="HStretch Bottom" name="ButtonPlace">
            <Widget type="Button" skin="Button" position="10 0 100 26" name="ButtonTemplate"/>
        </Widget>
    </Widget>
</MyGUI>
posted @ 2014-06-24 11:45 Enic 閱讀(369) | 評論 (0)編輯 收藏

目前覺得比較好的做法,C++寫具體控件效果,lua處理事件響應(yīng)
<EventList>
    <Event Name="OnCreate" File="LogonWnd.xml.lua" Func="MSG_OnCreate"/>
</EventList>

function MSG_OnCreate(self)
i = 0
print(self)
end

self為事件源注冊到lua中的類型事例。

迅雷界面庫中還有另一種做法:

function OnInit()

local owner = self:GetOwner()

              local objFactory = XLGetObject("Xunlei.UIEngine.ObjectFactory")
              local newIcon = objFactory:CreateUIObject("icon2","ImageObject")
              local xarManager = XLGetObject("Xunlei.UIEngine.XARManager")
              newIcon:SetResProvider(xarManager)
              newIcon:SetObjPos(45,165,45+70,165+70)
              newIcon:SetResID("app.icon2")
              local function onClickIcon()
                   XLMessageBox("Don't touch me!")
              end
              newIcon:AttachListener("OnLButtonDown",true,onClickIcon)
              self:AddChild(newIcon)
end

直接在lua層處理事件,貌似更舒服了。但是所引用的函數(shù)不能是上層C的,也不能有self參數(shù)了,否則內(nèi)存管理又是一大害處。
這里的AttachListener應(yīng)該和上層的Wnd類或者對應(yīng)的派發(fā)消息的CPP里邊的《EventList》關(guān)聯(lián),貌似這樣能動(dòng)態(tài)添加消息處理器,而且不用擔(dān)心對象生命周期管理。


觀摩了一下迅雷的sdk給的粒子,發(fā)現(xiàn)他們可能修改了虛擬機(jī),發(fā)現(xiàn)在不同的文件中會(huì)有相同的函數(shù),而且都是全局的,聯(lián)想到前面配置的時(shí)候要給定一個(gè)文件名和一個(gè)函數(shù)名,要么就傻逼的每次調(diào)用前都要loadfile一次,不然很可能修改lua虛擬機(jī),或者lua api支持按文件索引。

問題:cpp向lua派發(fā)事件的時(shí)候函數(shù)名,名字沖突。迅雷的做法是文件名+函數(shù)名索引,但是目前我的技術(shù)積累做不到。
解決辦法:
1.靠自己約定,即自己確保所有l(wèi)ua文件中都沒有相同的函數(shù)
2.參考魔獸世界,然后加點(diǎn)佐料的做法:<scripts file="LogonWnd.lua" />  <Event EventName="BtnClick" EventSink="LogonWnd.BtnClick">
也就是默認(rèn)每個(gè)文件名中的所有函數(shù)都在以文件名為名字控件的作用域下

posted @ 2014-06-19 11:56 Enic 閱讀(411) | 評論 (0)編輯 收藏

僅列出標(biāo)題
共22頁: First 6 7 8 9 10 11 12 13 14 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            日韩亚洲一区在线播放| 黑人巨大精品欧美黑白配亚洲 | 夜夜嗨网站十八久久| 欧美黄色小视频| 亚洲性xxxx| 老司机成人在线视频| 一区二区久久| 国产视频欧美视频| 蜜臀av国产精品久久久久| 日韩视频免费观看高清在线视频| 性做久久久久久免费观看欧美| 狠狠入ady亚洲精品| 激情综合网激情| 欧美经典一区二区三区| 亚洲综合第一| 亚洲高清一二三区| 久久字幕精品一区| 一区二区久久久久| 亚洲二区在线观看| 最新日韩av| 免费一区二区三区| 欧美一区二区三区在线观看视频| 亚洲激情在线| 国产农村妇女精品| 亚洲一区二区免费视频| 亚洲第一福利社区| 一本到高清视频免费精品| 久久综合久久综合久久| 亚洲视频电影在线| 一区二区日韩| 欧美一区在线直播| 亚洲欧洲在线播放| 午夜亚洲福利在线老司机| 这里只有视频精品| 一区二区三区国产精品| 香蕉乱码成人久久天堂爱免费 | 在线亚洲免费视频| 久久亚洲视频| 亚洲影视综合| 欧美日韩亚洲一区二| 免费在线看一区| 久久综合影视| 国产精品视频区| 欧美性一区二区| 欧美视频在线一区二区三区| 欧美日韩日韩| 亚洲大胆在线| 在线观看成人小视频| 亚洲成色999久久网站| 亚洲欧美日本国产有色| 欧美在线影院| 女主播福利一区| 欧美高清免费| 亚洲美女黄色片| 日韩午夜电影在线观看| 久久亚洲国产精品一区二区| 久久野战av| 国产夜色精品一区二区av| 亚洲第一精品夜夜躁人人爽| 亚洲欧美日韩综合aⅴ视频| 亚洲欧美日韩精品久久亚洲区| 欧美激情影院| 国产精品99久久久久久久女警| 浪潮色综合久久天堂| 国产自产在线视频一区| 亚洲欧洲一区二区天堂久久| av成人免费观看| 亚洲国产成人精品女人久久久 | 亚洲电影中文字幕| 亚洲视频图片小说| 亚洲乱码精品一二三四区日韩在线| 免费在线欧美黄色| 亚洲国产精品一区二区久| 欧美国产日韩精品| 欧美激情精品久久久久久| 亚洲区欧美区| 亚洲人成高清| 久久精品毛片| 国产精品区免费视频| 欧美一级淫片aaaaaaa视频| 亚洲欧美日韩在线播放| 久久尤物电影视频在线观看| …久久精品99久久香蕉国产| 欧美凹凸一区二区三区视频| 久久一区欧美| 一区二区三区四区五区精品| 亚洲欧美www| 亚洲福利专区| 亚洲少妇在线| 韩国v欧美v日本v亚洲v| 91久久久久久久久久久久久| 欧美激情1区2区3区| 欧美日韩国产123| 樱花yy私人影院亚洲| 欧美成人激情在线| 欧美日本中文| 亚洲日本一区二区| 免费一级欧美片在线观看| 欧美国产免费| 亚洲免费视频网站| 久久免费午夜影院| 亚洲视频999| 久久久综合精品| 国产一区二区精品丝袜| 欧美成人69av| 国产欧美在线播放| 亚洲高清在线精品| 欧美性一区二区| 欧美不卡激情三级在线观看| 国产精品久久激情| 亚洲午夜一区二区三区| 亚洲夫妻自拍| 国产亚洲精品久久久| 最近中文字幕日韩精品| 国产日韩一区在线| 夜夜嗨av一区二区三区| 伊人久久婷婷色综合98网| 在线亚洲激情| 亚洲人成人一区二区在线观看| 午夜精品在线视频| 亚洲一区中文| 午夜在线不卡| 亚洲午夜在线| 欧美激情在线免费观看| 久久亚洲国产精品一区二区| 国产精品亚发布| 日韩视频三区| 这里只有精品视频在线| 欧美日本不卡| 亚洲美女视频网| av成人天堂| 欧美精品国产一区二区| 欧美高清影院| 极品中文字幕一区| 久久久999精品视频| 欧美一区永久视频免费观看| 欧美日韩一级黄| 一区二区三区成人| 亚洲欧美激情在线视频| 欧美四级电影网站| 夜夜嗨av一区二区三区四区| 99视频精品在线| 欧美激情按摩| 亚洲人成网站色ww在线| 99riav国产精品| 欧美日韩伊人| 亚洲宅男天堂在线观看无病毒| 亚洲欧美日韩国产综合精品二区| 欧美片第一页| 99v久久综合狠狠综合久久| 一本综合久久| 国产精品麻豆va在线播放| 久久人体大胆视频| 久久日韩粉嫩一区二区三区| 美女日韩欧美| 亚洲精品国精品久久99热| 欧美成人激情在线| 国产日韩欧美| 亚洲在线视频免费观看| 欧美在线一区二区| 激情综合在线| 欧美精品一区二区视频 | 久久精品99无色码中文字幕| 久久伊人亚洲| 欧美成人午夜剧场免费观看| 亚洲国产你懂的| 欧美午夜精品久久久久久孕妇| 亚洲影院一区| 欧美不卡视频一区发布| 亚洲私人黄色宅男| 国产一区二区高清视频| 欧美岛国激情| 亚洲午夜性刺激影院| 久久久亚洲影院你懂的| 最新日韩精品| 国产精品一区在线观看你懂的| 亚洲国产精品激情在线观看| 国产精品亚洲欧美| 久久国产毛片| 亚洲午夜在线视频| 国产一区成人| 欧美精品一区二| 欧美在线免费| 欧美有码在线视频| 亚洲欧洲日本在线| 国产精品专区一| 欧美激情视频一区二区三区免费| 亚洲一区二区三区四区中文| 欧美韩日精品| 久久精品夜色噜噜亚洲aⅴ| 国产手机视频一区二区| 欧美激情一区三区| 久久免费视频网| 亚洲综合色丁香婷婷六月图片| 亚洲国产成人在线播放| 老牛影视一区二区三区| 亚洲欧美日韩天堂| 日韩亚洲欧美综合| 亚洲高清资源| 韩国v欧美v日本v亚洲v|