re: CPP博客首篇-兼論GUI輪子 cexer 2008-08-25 12:00
@陳梓瀚(vczh)
囧,前兩個月我發了free script于是大家都做腳本,一個月前我發了gui,大家就開始gui了……
@陳梓瀚(vczh)同學確實有著“拋玉引玉”的作用。再接再歷!
re: GUI之窗口過程thunk cexer 2008-08-25 11:49
@proguru
說的就是“特殊情況”。
@陳梓瀚(vczh)
曾經實現過類似HTML的,加了上腳本引擎,可配置能力和二次開發能力大大增強,用處還是很大的。
re: GUI之窗口過程thunk cexer 2008-08-25 09:13
@proguru
自己用個map把窗口與指針裝起來,另有好處。比如可以對map進行循環,進程結束時可以利用這個map做一些其它的事情,例如幫助用戶銷毀沒有銷毀的句柄,刪除未刪除的指針。
不錯,Placement 那個有創意。不過用 WM_SIZE 消息來移動還是最靈活的。
re: CPP博客首篇-兼論GUI輪子 cexer 2008-08-24 12:16
@空明流轉
有時候多個 GUI 線程還是很有用處的。比如說,用多線程模擬多進程,能夠節省很多資源。像 Explorer.exe。或者 Emeditor 的多文檔。
re: CPP博客首篇-兼論GUI輪子 cexer 2008-08-24 11:56
Welcome to the club!
研究“輪子功”的同志越來越多了哈。
不過我覺得 thunk 不是必須的哈。曾經用過 thunk,總是擔心吊膽的怕它崩潰。因為它跟操作系統對內存代碼的管理策略相關,有些操作系統在某些條件下可能會禁止提交可運行的內存塊。仍然期待博主寫出來哈!
@空明流轉
節點的類型轉換都是在解析完成以后的啊。如果是在循環當中用dynamic_cast,效率還是挺低的。
re: 08年08月22日 cexer 2008-08-22 21:50
樓主幸福啊,我完全是造自學。。
@陳梓瀚(vczh)
效率問題。dynamic_cast<>的比較的效率和字符串比較差不多,因此。。。不過想換成使用dynamic_cast<>也容易,直接
#define xml_cast dynamic_cast
就行了。
@陳梓瀚(vczh)
話說我的庫的接口完全是Utf-16字符串的,然后我有一個Mbcs字符串類,倆能互轉。所以用我的庫的人要么用Utf-16,要么在每一個參數和返回值那里都去轉。
一樣的哈。
@陳梓瀚(vczh)
真是牛人,不過你的代碼風格我不喜歡哈。
真是個牛逼的庫,以前用過它的 CXTOutookbar。
re: 求兩個數中最大值,不用判斷語句。 cexer 2008-08-22 09:12
有創意的哈,不過工程中不要有這種。
re: 模板函數問題 cexer 2008-08-20 23:33
是的,這種細節就不要自己猜了,找本書看看,效率高些。
re: 代碼自動生成-宏遞歸思想 cexer 2008-08-20 23:27
preprocessor,預處理元編程工具,包含重復和遞歸, 作者 Vesa Karvonen 和 Paul Mensonides.
re: 代碼自動生成-宏遞歸思想 cexer 2008-08-20 23:24
有的時候宏的確實很有用,BOOST里面有一個預處理元編程庫。
@空明流轉
的確是半斤八兩,不過虛函數還得查一下虛表,生成的匯編代碼會有多幾個寄存器操作,而靜態的函數指針是直接call地址的。
re: 自己寫的一個GUI框架的消息機制 cexer 2008-08-19 09:30
@minji
我會把我的心得和方法寫幾篇日志出來,到時你看看吧。三言兩語也不能說清楚。
@沈臻豪(foxtail)
指針也是有類型的,除了void*,但是放一大堆void*在一個容器里面,它的類型已經丟失,取出來的的時候就不知道怎么用這個void*進行函數調用了。
消息處理函數的參數類型限制得太死了,但是不同參數類型的函數你又無法放到一個容器里面去,這是寫GUI框架一個基本的問題,看看你會怎么解決。
re: 自己寫的一個GUI框架的消息機制 cexer 2008-08-16 16:40
@jxfwinter
這個東西解釋起來比較麻煩,我也不知道到底你是不是理解的和我想的一樣。和 SmartWin 不大一樣。定義即注冊有兩個意思,一是如果定義了函數則進行注冊,二是如果沒有定義函數就不注冊,并不是像你說的在基類里預先注冊過了。想像一下幾千個消息,要一個個注冊多麻煩。而且預先注冊的方法,將會限制消息處理函數的名字。有時間我會把這個消息機制寫幾篇日志出來分析一下實現原理。
re: 自己寫的一個GUI框架的消息機制 cexer 2008-08-16 00:45
@jxfwinter
你沒有看明白?
這個框架,函數定義即注冊,只需要定義函數即可,已經用不著像 MESSAGE_HANDLER 宏,或者類似功能的東西了。這也是與一般的框架最大的不同。
re: 奇怪的g++的行為 cexer 2008-08-13 17:51
確實有點古怪,那個 getnum() 明明是返回運行期數值。
re: 什么可以使一個人堅持到底? cexer 2008-08-13 09:12
興趣驅動的人適合作藝術家。
毅力驅動的人更適合作程序員。
re: 自己寫的一個GUI框架的消息機制 cexer 2008-08-09 19:35
@陳梓瀚(vczh)
能夠親手制造一個漂亮性感用起來爽的輪子,再苦再累也值得啊.
你的意思是一個針對每一個event,都寫一個handler類?
多謝提供代碼,等我的框架有個成熟穩定了,也打算開放代碼.
@陳梓瀚(vczh)
GUI 太復雜了,GUI Editor 不可能完成所有的工作.而且有了這些接口,GUI Editor 的相關部分要容易實現得多.
re: 自己寫的一個GUI框架的消息機制 cexer 2008-08-09 11:52
@陳梓瀚(vczh)
將event bind 到其它類的成員函數,或者全局函數,以前都實現過,不過不是很實用,干脆去掉了.對于全局函數,如果不是無參數的函數,那么給它提供運行時的參數是一件麻煩的事.因為設計框架的時候,并不知道用戶會提供些什么類型的全局函數,如果把這件事給用戶提供,用起來比較麻煩,接口看起來不簡單明了.如果只允許提供特定的參數數目的類型,倒是很簡單,不過就不實用了,所以后來就去掉了.
WM_COMMAND 和 WM_NOTIFY ,或者是其它消息的細節,框架都應該封裝起來,不讓最終的用戶接觸.
re: 自己寫的一個GUI框架的消息機制 cexer 2008-08-08 13:07
@eXile
這倒是的.你說的這個問題,JLIB2(一個 C++ 版的 AWT )就解決得很好,因為設計方式都是 java 的,所以和 WTL,MFC 之類的大大的不同.不過它大量地使用虛函數,存在性能問題.WinX 這個庫的代碼我也看過,它在 GUI 上幾乎沒有任何的創新,不能說它是一個獨立的 GUI 框架.只能說是對 WTL 的小修補.
@eXile
多謝,我對QT用得不多,我會把你這個方法更新到日志上去.
re: 兩種模式的選擇 cexer 2008-08-08 11:04
我覺得模式二好一些.比如說如果因為某些原因產品的生產順序需要改變,如果用模式一,國為每一個產品生產的時候是依賴其它產品的,所以需要更改產品鏈當中的相關產品的生產代碼.但是如果用模式二,就只需要修改控制器的代碼.
re: 自己寫的一個GUI框架的消息機制 cexer 2008-08-07 19:42
@megax
這種方式的消息處理,要比 MFC 簡單直接吧。你看到那么多的模板參數,最終的使用者是不會接觸到的,都是框架用于擴展自身的。
re: 自己寫的一個GUI框架的消息機制 cexer 2008-08-07 09:19
@eXile
你說它沒有更高階的抽象,大概是因為你在代碼里看到了一些 windows 上的類型。不過類型都是可以 typedef 的,消息值是可以 define 的。這個框架雖然是針對 windows 平臺的,寫這個框架的目的是嘗試一種新的方式,對所有消息驅動的系統都是適用的,包括非 GUI 系統,或非 windows 平臺。
re: 自己寫的一個GUI框架的消息機制 cexer 2008-08-06 23:20
@Sil
謝謝支持,不過還在寫作當中。
re: 自己寫的一個GUI框架的消息機制 cexer 2008-08-06 23:15
@陳梓瀚(vczh)
不知道你說的很囧具體是什么?這個框架的上一個版本封裝了許多的控件,不過沒有封裝 ListView,所以不知道是否存在你說的問題,因為是實驗性質的東西,還沒有在大的工程上測試過。
re: Vista的新控件 cexer 2008-07-26 17:59
這個沒有絕對的吧,得看具體的環境。
比如有一個GUI框架,它用prototype模式從xml產生界面。分幾步進行
1.解析器看到一個結點
<window name="xxxx" text="xxx ... />
2.從prototype的注冊表里查找節點名字"window"對應的prototype,并clone出對象window
3.將xml結點傳給對象,調用對象的創建函數window->create( XmlElement& xml )
我覺得在這種方式下先new后create會比一步創建好得多。當然也可以第二步時,將xml結點也同時傳給prototype創建者,一步創建成功,不過這樣比起分步進行,一是少了一個可控制進行其它操作的機會,二是如果以后創建方式有所更改,就也得同時更改prototype創建者的代碼。
re: Vista的新控件 cexer 2008-07-25 11:52
強迫用new來創建對象,在一些場合當中會造成設計上的難題。
比如假設有設計為了更大的靈活性,要求對象的創建與對象管理的資源的初始化與創建能夠要分步進行。
re: dynamic_cast使用的討論 cexer 2008-07-10 23:46
在實際的項目當中,可以自己實現dynamic_cast的運行時安全,并且更具有效率的轉換方法。com也能一種。
@夢在天涯
應該是TlsSingelton,我寫錯了哈,謝謝提醒。
@www.helpsoff.com.cn
這個"/MT"應該指的鏈接是微軟運行時庫,C運行時庫。C++標準庫對包括map在內的容器在多線程環境當中的情況沒有采取任何的保護措施。
re: Win XP系統任務欄實用技巧總集 cexer 2008-07-09 18:59
謝謝分享
呵呵謝謝耐心看完。map可以通過編譯器設置線程安全?我還不知道呢。不過引入tls與“線程相關的單件”,是為了可以讓更多更復雜的此類應用更容易實現。還有map的線程安全是由實現提供的(非標準),應該不是所有編譯器都支持的吧?