ActiveX控件是微軟公司提供的功能強大的程序設計和開發技術,是COM組件開發技術的重要組成部分。它是OLE的第三個版本,對原先OLE控件的最大擴展是增加了Internet功能,它不僅可以在支持OLE控件的容器中使用,更可以作為一個Internet控件,直接成為網頁的一部分。另外,ActiveX控件作為一種可重用的組件,相當於一個封裝好的代碼模塊,它是通過其方法、屬性、事件來與應用程序進行通信的,此外,ActiveX控件是與開發語言無關的。用戶在使用控件時不必考慮它是VC還是用VB等其它語言開發的,應用程序都是通過COM與控件進行通信的。可見,任何支持ActiveX控件的軟件平台上都可以使用ActiveX控件,它使得不同廠商所開發的控件可以真正地組裝在一起,從而令軟件的生產過程類似於硬件業的各個插件的裝配過程一樣,實現了軟件的工業化,大大降低了軟件的開發成本,極大地提高了軟件的生產效率,實現了軟件資源的共享。
ATL技術
1)ATL
ATL是ActiveX Template Library 的縮寫,它是一套C++模板庫。使用ATL能夠快速地開發出高效、簡潔的代碼(Effective and Slim code),同時對COM組件的開發提供最大限度的代碼自動生成以及可視化支持。從Microsoft Visual C++ 5.0版本開始,Microsoft把ATL集成到Visual C++開發環境中。目前,ATL已經成為Microsoft標准開發工具中的一個重要成員,日益受到C++開發人員的重視。
在ATL產生以前,開發COM組件的方法主要有兩種:一是使用COM SDK直接開發COM組件,另一種方式是通過MFC提供的COM支持來實現。
直接使用COM SDK開發COM組件是最基本也是最靈活的方式。但是,這種開發方式的難度和工作量都很大,一方面,要求開發者對於COM的技術原理具有比較深入的了解,另一方面,直接使用COM SDK要求開發人員自己去實現COM應用的每一個細節,完成大量的重復性工作。
使用MFC提供的COM支持開發COM應用可以說在使用COM SDK基礎上提高了自動化程度,縮短了開發時間。MFC采用面向對象的方式將COM的基本功能封裝在若干MFC的C++類中,開發者通過繼承這些類得到COM支持功能。但使用MFC開發的COM組件,尤其是ActiveX控件的開發,會產生相當大的代碼冗余,而且必須要依賴於MFC的運行時刻庫才能正確地運行。
ATL技術是目前開發COM組件的一種比較理想的技術。ATL中所使用的基本技術包括COM技術、C++模板類技術(Template)以及C++多繼承技術(Multi-Inheritance) 。
2) ATL的基本使用
使用ATL開發一個COM應用基本可以分為以下幾個步驟:
(1)創建一個新的ATL工程,並對工程的選項進行適當的配置。
(2)向新創建的工程添加新的ATL類,並對該類進行一些初始配置工作。
(3)根據COM應用的基本要求向新的ATL類加入新的接口定義,並實現相應的接口成員函數。
(4)編譯連接工程,注冊COM應用。
利用ATL技術創建ActiveX控件CircleCtl
1) 創建ATL項目
使用ATL COM AppWizard 創建ATL框架為該項目命名為Circle,按照向導提示向下做,采用默認設置,即Server Type類型為Dynamic Link Library(DLL)。
2) 向ATL項目添加ActiveX控件
首先從Insert菜單項中選擇New ATL Object…調出 ATL Object Wizard對話框,然後左邊Category列表選擇Object,右邊相應地選擇Full Control,按Next繼續,出現 ATL Object Wizard屬性對話框,在Names選項卡中,我們只需要在Short Name 編輯框輸入CircleCtl即可,其它系統就會自動給定,也可以修改,我們這裡保持系統給定狀態;在Attributes 選項卡中,選擇 Support ISupportErrorInfo 和 Support Connection Points 兩個復選框,這兩項分別支持出錯信息和連接點;Miscellaneous選項卡保持默認設置;Stock Properties中我們把FillColor添加到支欄中,確定之後就把該控件加到項目中了。