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

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>
            国产又爽又黄的激情精品视频| 久久疯狂做爰流白浆xx| 亚洲尤物在线| 亚洲欧美激情一区二区| 香蕉久久一区二区不卡无毒影院| 午夜久久久久久| 久久久久久久国产| 欧美韩日精品| 一区二区三区久久精品| 午夜精品久久久久久久久久久久久 | 日韩天堂在线观看| 99综合在线| 欧美一区亚洲一区| 牛牛影视久久网| 欧美色网在线| 韩国成人福利片在线播放| 亚洲国产高清在线观看视频| 在线视频一区二区| 欧美一区二区在线免费播放| 免费成人高清在线视频| 99在线观看免费视频精品观看| 性久久久久久久久| 欧美激情成人在线| 国产农村妇女毛片精品久久麻豆| 在线观看欧美激情| 亚洲专区免费| 亚洲国产精品成人一区二区| 一区二区三区四区国产| 久久蜜桃精品| 国产精品美腿一区在线看| 136国产福利精品导航网址| 午夜视频在线观看一区| 亚洲国产第一| 亚洲精品中文字幕女同| 欧美日韩亚洲一区二| 狠狠干成人综合网| 亚洲午夜精品一区二区| 欧美大胆人体视频| 欧美一区二区高清在线观看| 欧美日韩系列| 亚洲精选一区二区| 久久久九九九九| 亚洲一区二区高清| 欧美日韩免费一区二区三区视频| 一区二区视频欧美| 久久精品国产一区二区电影 | av成人免费在线观看| 欧美.www| 欧美在线一二三| 国产乱人伦精品一区二区| 亚洲精品色图| 亚洲激情网站| 欧美阿v一级看视频| 在线不卡亚洲| 另类亚洲自拍| 久久影院午夜片一区| 黑人巨大精品欧美黑白配亚洲| 欧美一区二区三区四区在线| 亚洲一区二区三区高清| 国产精一区二区三区| 欧美一区二区三区在线免费观看| 在线中文字幕一区| 欧美日一区二区三区在线观看国产免| 99视频精品全部免费在线| 亚洲欧洲一区二区在线播放| 欧美精品成人| 亚洲免费在线观看视频| 亚洲一区二区黄色| 国产亚洲福利| 久久人91精品久久久久久不卡| 久久国产欧美精品| 亚洲国产精品va在看黑人| 欧美激情1区2区3区| 欧美激情欧美狂野欧美精品| 一区二区三区国产| 亚洲视频一起| 国产专区一区| 亚洲黄色在线观看| 国产精品久久久久久一区二区三区| 亚洲伊人第一页| 欧美一区二区视频97| 在线看片第一页欧美| 亚洲国产精品第一区二区| 欧美日韩在线免费| 久久久久久久性| 欧美激情精品久久久久| 亚洲欧美日韩一区二区三区在线| 校园春色综合网| 91久久久久久国产精品| 夜夜狂射影院欧美极品| 国产日韩欧美一区在线| 亚洲电影免费观看高清完整版在线观看| 亚洲承认在线| 日韩一级免费| 国产在线观看一区| 欧美福利影院| 欧美性开放视频| 久久一区精品| 欧美日韩亚洲一区二区三区| 久久国产88| 欧美精品1区2区| 久久人91精品久久久久久不卡| 欧美精品一区在线| 久久久噜噜噜| 国产精品久久久久久超碰| 女生裸体视频一区二区三区| 国产精品第13页| 欧美激情第4页| 国产精品视频观看| 亚洲国产日韩综合一区| 国模一区二区三区| 亚洲午夜精品国产| 亚洲精品一区久久久久久| 午夜久久tv| 亚洲欧美日韩国产另类专区| 另类春色校园亚洲| 久久久久91| 国产欧美在线| 亚洲一区二区精品在线| 在线性视频日韩欧美| 欧美成人免费一级人片100| 久久九九久精品国产免费直播| 欧美午夜剧场| 日韩视频在线观看国产| 99国产精品99久久久久久| 久久综合九色九九| 久久综合九色99| 国产一区美女| 午夜精品久久久久久久99热浪潮| 亚洲一区二区少妇| 欧美日韩一区二区三区在线 | 91久久精品美女高潮| 亚洲第一福利视频| 久久成人精品无人区| 久久精品国产久精国产爱| 国产三区二区一区久久| 欧美亚洲免费| 久久久久久亚洲精品杨幂换脸| 国产美女精品视频免费观看| 亚洲一区久久久| 欧美一区二区女人| 国产视频久久久久| 久久精品女人的天堂av| 欧美www在线| 亚洲黄色成人| 欧美精品在线观看| 一区二区免费看| 欧美一区二区视频免费观看 | 中文在线一区| 国产精品久久久久久久一区探花 | 欧美日韩一区二区三区四区五区| 99在线精品视频| 亚洲一区三区在线观看| 欧美三级中文字幕在线观看| 亚洲性人人天天夜夜摸| 久久精品国产99国产精品澳门| 国产伦精品一区二区三区高清| 亚洲欧美一区二区原创| 老牛影视一区二区三区| 亚洲人成亚洲人成在线观看| 欧美日韩一区综合| 欧美一级久久久| 亚洲电影免费观看高清完整版在线观看 | 亚洲黄色一区二区三区| 欧美精品免费视频| 亚洲曰本av电影| 男同欧美伦乱| 亚洲在线视频网站| 一区二区亚洲欧洲国产日韩| 欧美久久久久久久| 欧美一区二区视频在线观看| 亚洲第一在线综合网站| 先锋影音网一区二区| 亚洲激情网站| 国产精品一区二区你懂得| 巨乳诱惑日韩免费av| 亚洲夜晚福利在线观看| 欧美国产在线电影| 欧美中文字幕在线| 中文在线资源观看视频网站免费不卡| 国内精品美女av在线播放| 欧美午夜剧场| 欧美黄免费看| 久久久亚洲国产天美传媒修理工| 亚洲三级色网| 免费成人你懂的| 亚洲一区国产| 一本到高清视频免费精品| 伊人夜夜躁av伊人久久| 国产精品私房写真福利视频| 欧美精品啪啪| 欧美成人免费在线| 久久婷婷亚洲| 午夜国产精品视频| 一区二区精品在线观看| 亚洲精品视频免费观看| 欧美国产日韩一区二区三区| 久久av红桃一区二区小说| 亚洲综合另类| 亚洲一区二区黄|