基本上IE編程是圍繞著ATL架構展開的, 所以, 我們不得不面對ATL說點什麼,
ATL是一個基於COM(元件物件模型)SDK的架構庫,如果你甚至連COM都不知道是什麼,建議先閱讀一些有關COM的技術書
籍(注1), 大致瞭解下COM出現的原因,目的,瞭解什麼是類廠及意義,COM對象是怎樣被建立和調用,以及引用計數
的維護等. 最後,寫幾個簡單的COM調用程式就可以了,如果你想更深入地理解COM,也不是短時期就能有所成效的,
幸運的是ATL架構庫就是最好的樣本.
ATL封裝了類廠管理類 - CComCoClass, 引用計數管理類 - CComObjectRootEx, 事實上, 當你在Visual Studio
可視化開發環境中, 添加一個簡單的COM對象類時, 你可以看到它是從CComCoClass, CComObjectRootEx派生的.
而最終COM對象的建立是由CCOMMoudle類完成的,具體根據全域靜態COM映射表,然後調用CComModule::Init
(...). 所以, 你再也不用原始的方法去建立類廠, 對全域和局部對象引用計數的管理, 所有這一切ATL的類架構
已經幫你完成了, 所有你需要做的就是從這些基類派生自已的COM對象類, 更為幸運的是VS整合式開發環境已經幫
助我們自動完成了初始代碼的建立, 一個典型的案例就是在你的工程中添加一個新的COM對象.
上面說了這麼多, 其是, 只是簡單地講了下COM和ATL的關係, 事實上, 要將晦澀的每個技術問題解釋的相當清楚
, 已超出本文的範圍, 附註推薦的書籍將協助你開啟這第一扇門(實際上你可能只需閱讀前面幾個章節, 瞭解一
下why > what > how就足夠了).
如果說ATL是IE編程的殼, 那麼IE事件的互動, 對IE介面的實現(implementation), 就是IE編程的血肉部分. 說
到事件互動, 就不得不談到IE是怎樣傳遞事件到你自定的事件接收器(sink), 這是由事件連接點(connection
point)完成的, 以後我們將進一步接觸這個問題. 另一方面, 對IE介面的實現也正是開發IE外掛程式的精髓, 諸如,
工具條(toolbar), 工具按鈕(button), 側邊欄(sidebar)等. 稍後, 我將一一講到.
總而言之, 精通ATL/COM是完全沒有必要的, 從表象上去大致理解下COM對象的建立,管理,事件接收,介面的實現
就可以了, 如果要深入理解COM在基於組件(component)的軟體開發中的優勢和好處, 建議你再去深入閱讀 < <COM
技術內幕>>(注1).
注1: < <COM技術內幕>> 潘愛民譯.
< <ATL開發指南>>