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