或許,你是頑固的 SDK 擁護者;
或許,你對 MFC 深惡痛絕,甚至像我一樣對它幾乎一無所知;
或許,你符合以上兩點,正尋求一條出路;
或許,你找到了 WTL,卻因技術支援與相容性問題猶豫不決;
或許,你還有更多「也許」……
世界上的故事,往往就是由這些「也許」交織而成。
推薦技術前,先分享我從中獲益多少,才具說服力。自從使用 ATL,我覺得腰不酸了、腿不疼了、走路有勁了——這系列文章正是以 ATL 為核心。
SDK 終非舒適歸宿,代碼超過 1000 行便難以維護——臃腫、堆砌、全域變數耦合、復用性差。MFC 與 VCL 雖結構清晰,但若深入內部同樣複雜。以我用 SDK 寫的進程檢視器 July 2.11 版為例,僅 1000 行便讓我難以駕馭,多次想重寫,卻因 MFC/VCL 執行庫龐大、EXE 體積大而作罷。
若 MFC、VCL 是深閨名門的大家閨秀,WTL 便是浪跡天涯的絕色歌女。2004 年邂逅 WTL,精良設計、輕巧 EXE、無與倫比效率,若非相容性問題(WTL 7.1 甚至無法編譯自帶範例),我幾乎拜倒在石榴裙下。迷茫持續到 2005 年畢業,8 月為研究不借助 MFC 呼叫 ActiveX 控制項技術,接觸 WTL 發源地——為 COM 組件開發設計的 ATL。一個月後,用 ATL 重寫的 July v2.20 誕生。
比起大家閨秀與絕色歌女,ATL 更像溫柔賢惠的樸實女子。
ATL 非萬靈丹,看你是否有以下「病症」:
| 需求 | 適合方案 | 不適合方案 |
|---|---|---|
| 重程式獨立性,不想要執行庫 | ATL、WTL、VCL、MFC(靜態連結) | .NET、VB |
| 重程式效率 | ATL、WTL | VB、VCL、MFC(因維護視窗物件鏈) |
| 重 EXE 體積 | ATL、WTL | VCL、MFC(靜態) |
| 無 MFC 環境下開發 (如 Smartphone 2003) | ATL、.NET Compact Framework | MFC、VCL |
本人對 WTL 無偏見,但 WTL 非官方支援是事實。期待 WTL 官方化那一天,上述問題將迎刃而解。
《ATL 的 GUI 程式設計》是為調和 ATL/WTL 矛盾的折中方案,也是 2006 年獻給大家的禮物。閱讀前提:
系列內容涵蓋:ATL GUI 基礎、進階主題、ATL 擴展、關鍵實現技術解析(理解與否不影響使用,可選讀)。所有原始碼在 VC6.0 SP4 與 VS2003.net 編譯通過,主環境以 VC6.0 為準。
——也許,認識 ATL 後,以前的「也許」將不再是「也許」……