首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

ATL GUI 程式設計系列前言:為何選擇 ATL?

     編輯:關於VC++

前言:在諸多「也許」中尋找出路

或許,你是頑固的 SDK 擁護者;
或許,你對 MFC 深惡痛絕,甚至像我一樣對它幾乎一無所知;
或許,你符合以上兩點,正尋求一條出路;
或許,你找到了 WTL,卻因技術支援與相容性問題猶豫不決;
或許,你還有更多「也許」……
世界上的故事,往往就是由這些「也許」交織而成。

我的轉型歷程

推薦技術前,先分享我從中獲益多少,才具說服力。自從使用 ATL,我覺得腰不酸了、腿不疼了、走路有勁了——這系列文章正是以 ATL 為核心。

  • 2000 年:以 Visual Basic 學習 Win32 程式設計(嚴格說 Win95 只是 16/32 位混合體)。
  • 2001 年:厭倦 VB 執行庫與效率,轉投 Delphi。
  • 隨後:受「真正程式設計師用 VC」思想影響,投奔 VC++。因囊中羞澀不捨得買好書,加上國內 MFC 書籍良莠不齊,我對 MFC 產生強烈抵觸,憑藉雜誌零星 SDK 文章與全英文 MSDN 6.0 開啟艱難長征。雖磕磕碰碰,最終仍抵達屬於我的「陝北」。期間發表的 Win32 技術文章幾乎不涉 MFC——承認我對它有偏見,雖 2005 年畢業設計仍用 MFC 完成。

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 非萬靈丹,看你是否有以下「病症」:

需求適合方案不適合方案
重程式獨立性,不想要執行庫ATL、WTL、VCL、MFC(靜態連結).NET、VB
重程式效率ATL、WTLVB、VCL、MFC(因維護視窗物件鏈)
重 EXE 體積ATL、WTLVCL、MFC(靜態)
無 MFC 環境下開發 (如 Smartphone 2003)ATL、.NET Compact FrameworkMFC、VCL

使用 ATL 可能面臨的「併發症」

  • 精靈支援較少:VC IDE 幾乎為 MFC 設計,ATL 僅有幾個視窗訊息處理器精靈,大量訊息映射需手寫。
  • 技術資源有限:ATL 本為 COM 組件設計,GUI 開發資料極少,除 MSDN 與網上寥寥文章外難覓蹤跡。

ATL 優於 WTL 的關鍵優勢

  • 代碼相容性強:VC6.0 代碼多數情況下無需修改即可在 VS2003 編譯執行。
  • 訊息分發簡單:WTL 豐富的訊息分發反成累贅,手寫多樣化處理函數非輕鬆事。

本人對 WTL 無偏見,但 WTL 非官方支援是事實。期待 WTL 官方化那一天,上述問題將迎刃而解。

關於本系列連載

《ATL 的 GUI 程式設計》是為調和 ATL/WTL 矛盾的折中方案,也是 2006 年獻給大家的禮物。閱讀前提:

  1. 熟悉 C++ 模板技術(ATL 技術基石)。
  2. 了解 Win32 SDK 程式設計(經典教材:Petzold《Windows 程式設計》),基礎知識不再贅述。

系列內容涵蓋:ATL GUI 基礎、進階主題、ATL 擴展、關鍵實現技術解析(理解與否不影響使用,可選讀)。所有原始碼在 VC6.0 SP4 與 VS2003.net 編譯通過,主環境以 VC6.0 為準。

——也許,認識 ATL 後,以前的「也許」將不再是「也許」……

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved