轉(zhuǎn)載請(qǐng)注明出處:http://www.shnenglu.com/proguru/archive/2008/08/24/59755.html
一直以來(lái)都是一個(gè)C++的堅(jiān)定支持者和努力實(shí)踐者,盡管C++面臨來(lái)自傳統(tǒng)語(yǔ)言和動(dòng)態(tài)語(yǔ)言的多方壓力,但我仍然堅(jiān)信C++有自己適用的領(lǐng)域和無(wú)可替代的地位。既然是C++的追隨者,選擇CPPBLOG來(lái)寫(xiě)點(diǎn)兒東西也就成了順利成章的事情了。其實(shí)很久以前就考慮過(guò)在cppblog開(kāi)博寫(xiě)點(diǎn)兒啥,但是一來(lái)沒(méi)有文采,二來(lái)懶惰成性,這個(gè)想法就一直擱置了。最近偶然看到cexer同學(xué)的自己寫(xiě)的一個(gè)GUI框架的消息機(jī)制,突然就來(lái)了興致,而且興致頗高,因?yàn)槲乙彩且粋€(gè)GUI輪子的制造者。因?yàn)橐恢备杏X(jué)自己的GUI輪子(暫定名KWinGUI)成熟度太低,所以只是自己在用。“重復(fù)發(fā)明輪子”的論點(diǎn)我是不想反駁的,這個(gè)世界不可能只有一個(gè)輪子,而且我們需要更好的輪子,更性感的輪子("性感的輪子"語(yǔ)出cexer,呵呵),更適合自己的輪子。
GUI Framework的確是個(gè)覆蓋范圍極廣的領(lǐng)域,平臺(tái)依賴(lài)性比較強(qiáng)。線程管理、內(nèi)存管理、消息派發(fā)、callback、i18n、圖形渲染、組件模型、甚至包括跨平臺(tái)的考慮等等,而且現(xiàn)在看來(lái)一個(gè)GUI Framework沒(méi)有可視化GUI設(shè)計(jì)器的話,是遠(yuǎn)不夠完美的。界面和邏輯的充分解耦乃是GUI Framework的終極追求之一,用xml來(lái)描述界面也許是個(gè)不錯(cuò)的主意。
C++的動(dòng)態(tài)特性是比較薄弱的,比如RTTI、對(duì)象動(dòng)態(tài)生成、對(duì)象序列化等等,而這些對(duì)于一個(gè)GUI Framework 來(lái)講卻是至關(guān)重要的,這需要付出更多的努力。盡管如此,C++仍然是最適合開(kāi)發(fā)GUI的語(yǔ)言。
GUI如此之龐雜以至于憑一人之力實(shí)在是有所力不從心,簡(jiǎn)直是在自虐。
太笨重、丑陋的GUI框架不是我所喜歡的,所以我選擇做自己輕量級(jí)的框架,雖然簡(jiǎn)單,卻可以全局把握,運(yùn)用自如。
還有一個(gè)重要的關(guān)注點(diǎn),那就是thread safe,特別在這個(gè)多核風(fēng)行的年代,自始至終都應(yīng)該高度關(guān)注,盡量不要用全局的、static的變量,時(shí)刻注意各種competition conditions。
用C++來(lái)包裝GUI,thunk是一個(gè)很好的trick,甚至是必須的,下一篇就來(lái)講一下thunk。