尋找理想類別庫的漫漫長途
我一直在尋找一個理想的 Windows C++ 類別庫:提供面向物件的視窗封裝、靈活的訊息回應機制、完備的 UI 框架方案、標準控制項的精簡封裝、支援作業系統新特性、支援功能擴充與二次開發、具備代碼自動生成機制、生成的程式佔用較少系統資源、擁有完整的代碼與文件支援。
你會說:「那就用 MFC 啊!」
為何決定放棄 MFC?
- 類別庫陳舊:MFC 4.21 (1998 年) 後停止更新,無法支援 Windows 98/2000 後的新特性。
- 效率低下:臃腫的訊息映射、為相容性保留的大量代碼拖慢執行速度。
- 執行檔龐大、資源佔用高:簡單功能動態連結也超過 200KB,佔用 3-4% 系統資源。
當一個簡單程式就這麼「重」時,我決心尋找替代方案。
嘗試過的替代方案
- CodeProject Class 庫:基礎架構尚可,但龐大的虛函數機制導致物件臃腫,無法降低資源佔用。
- 自製 miniGUI:參考 MFC 架構自行實作,最終因「應用程式與框架兩線作戰」不可行而放棄。
邂逅 WTL:轉機出現
因工作需開發 COM 元件,在不可用 MFC 場合改用 ATL。ATL 提供視窗封裝與簡單訊息映射,但過於精簡,開發應用程式幾乎不可能。WTL (Windows Template Library) 正是填補這個缺口的關鍵——它在 ATL 基礎上建構完整 UI 框架。
WTL 的獨特屬性
- 由 Microsoft 內部熱情工程師維護,非官方產品,但可從官網下載最新版。
- 無 MSDN 官方文件 (搜尋 WTL 結果為 0),但全球開發社群活躍,問題皆有熱心解答。
- MFC 功能幾乎都能在 WTL 實現,只是方式不同。
- 將既有 MFC 程式移植 WTL 幾乎不費吹灰之力,靜態連結 WTL 程式比動態連結 MFC 程式更小,資源佔用僅一半。
翻譯 Michael Dunn 系列文章的緣起
網路上 WTL 範例雖多,但缺乏系統性教學。發現 Michael Dunn 的 WTL for MFC Programmers 系列,如獲至寶,遂請求授權翻譯中文版。Michael Dunn 簡歷:
- 住在洛杉磯,UCLA 數學學士 (1995)。
- Symantec 工程師,主導 Norton AntiVirus 2000 新介面設計。
- 現為 pressplay (後為 Napster) 開發人員,開發 IE 工具列 UltraBar。
- 合夥創辦 Zabersoft (洛杉磯/歐登賽),喜歡彈球、騎車、PlayStation、學習法文/中文/日文。
讀者指引
- MFC 堅定捍衛者:可停在這裡,繼續閱讀只會浪費時間。
- 對另類技術充滿熱情的程式設計師:不能不研究 WTL,它真的是一座寶藏。
最後用朋友對我翻譯的評價作結:「翻譯水平和你用的滑鼠一樣爛!」——Orbit (inte2000@263.net),2003年8月17日