?

用ATL制作ActiveX控件及其使用

2017-06-05 15:02藺新華
電腦知識與技術 2017年10期
關鍵詞:通訊

藺新華

摘要:隨著軟件開發技術的發展,COM組件在現代編程中越來越重要,不懂得COM就很難跟上時代。COM為程序員開發Windows應用程序帶來了便利,而COM最令人矚目的實現就是ActiveX控件。該文介紹了如何用ATL技術制作輕量級的ActiveX控件,怎樣在客戶容器中與ActiveX控件通訊。

關鍵詞:COM;ATL;ActiveX;通訊

中圖分類號:TP3

文獻標識碼:A

文章編號:1009-3044(2017)10-0057-03

1.CoM,ActiveX和ATL概述

COM(Component Object Model,組件對象模型)是Windows操作系統的技術和核心,是搭建Windows應用程序的基礎,COM技術規范描述了一種創建組件即可重復使用的對象的方法,它提供了一種基于接口查詢的機制來完成對象之間的通訊,以客戶/服務器程序的體系結構協同完成特定的功能,COM已經成為新世紀的Windows程序員必須掌握的技術,同時該技術已經成為Microsoft公司開發方向的重點,COM技術最令人矚目的就是AcfiveX控件,ActiveX控件可以看作一種早期產品(即VBX)的延伸,同VBX相比,ActiveX定義了一個對程序設計語言中立的接口,ActiveX提供了如下的特性:

1.1語言的無關性

這使得基于Windows平臺的開發工具可以混用AcfiveX控件,例如你可以用C++編寫,而在Visual Basic中使用,達到二進制的設計標準。

1.2軟件版本升級的健壯性

ActiveX控件通過提供多接口機制支持軟件版本升級的健壯性,ActiveX控件的不同功能用不同的接口向外展示,要為舊的組件添加新的功能時,為組件新添加一個接口就行了,這樣舊的應用程序在不進行更新的情況下運行,同時新的應用程序可以通過查詢新接口利用組件的新功能。

1.3面向對象的特性

ActiveX控件允許以面向對象的方式傳遞其功能,AcfiveX控件提供三種基本的面向對象的特性,即封裝性、繼承性和多態性,并且是以一種語言無關的方式提供的。

1.4位置透明性

ActiveX控件的用戶并不需要明確的了解它所處的位置,它可能在一個DLL(同一進程)中,可能在一個EXE(不同進程)中,也可能在一個遠程計算機上(分布式組件對象)。

早期開發ActiveX控件時,必須用MFC類庫,與其相比,用ATL(Active Template Library,活動模板庫)開發ActiveX控件具有如下優點:小型、快速、不依賴任何DLL文件,用ATL制作的ActiveX控件能更好地支持以上特性,現在,ATL逐漸成為未來的Windows程序開發中C++的框架,它已經成為Visual c++開發環境的一部分,能更好地支持ActiveX的特性。

2.用ATL開發一個ActiveX控件

2.1建立工程

利用VC的向導新建一工程,工程類型為ATL COM Ap-pWizard,工程名為MyATLActiveX,單擊OK,進人下一步,選擇Dvnamic Hnk Library(DLL)服務類型,其他保持缺省設置。

2.2建立對象框架

將工作空間窗口切換到Class View面板,右鍵點擊MyAT-LActiveX Class,在彈出的菜單中選擇NewATLObject項,進人ATL Object Wizd向導,在向導第一步中選擇Coned類別和Full Control對象,單擊下一步,在接下來的下一步中對新建的COM對象的屬性進行設置,在Names頁的ShortName框中輸入組件的名字,我們輸入MyATLAcfiveXCfl,其它由向導自動填充;在Attributes頁中我們需要對COM對象的線程模型、接口類型等進行設置,我們設置如圖1:

單擊確定,生成MyATLActiveXCfl對象的框架,系統為我們添加了IMyATLActiveXCtl接口(輸入接口)、_IMyATL Ac-tiveXCflEvents接口(輸出接口)、MyATLActiveXCfl類、MyAT-LActiveX,idl文件(接口描述語言文件)。

2.3添加方法

2.5建立代理類

要使客戶容器能夠使用ActiveX控件的輸出函數,必須為事件創建代理類,這是COM技術的規范,便于與組件通訊時數據的傳遞,在MyATLActiveXCtl類上單擊右鍵,在彈出的菜單中選擇Implement Connection Point項,進入連接點向導,如圖2所示,選擇_IMyATLActiveXCtlEvents接口,單擊OK按鈕,向導自動為我們添加了CProxy_IMyATLActiveXCtlEvents代理類及文件MyATLActiveXCP,h,并在此文件中實現了事件Fire_Re-turnData(short ResData)。

2.6重載OnDraw函數提供控件狀態的反饋

利用Windows API函數中的GDI函數繪出控件,控件的背景采用紅色,在控件中顯示一個標簽Data和若干蘭色小方框,小方框的個數由方法SetData的參數決定。

選擇Builder菜單下的Builder MyATLActiveX,dll,完成Ac-tiveX控件的編譯、注冊。

3.在容器中與ActiveX通訊

3.1建立工程

利用VC的向導新建基于Dialog based的工程,工程名為MyActiveXCon,其它保持缺省設置。

3.2設計界面

首先要做的是在對話框中安置ActiveX控件,右擊對話框,在菜單中選擇Insert AcitveX Control項,在對話框中選定MyAT-LActiveX Control項,再按OK,則剛建立的ActiveX控件出現在對話框中,調整其到合適位置和大小。

下一步是將對話框和組件連在一起,在可以與MyATLAc-tiveX控件通訊(調用控件或從中接收事件)之前,必須將它添加到項目中,為此,可通過類向導為控件添加一個成員變量,從View菜單中選ClassWizard項,在MFC ClassWizard對話框中選Member Variables頁;選擇ActiveX控件的ID:IDC_MYAT-LACTIVEXCTLl,再選Add Varible按鈕,出現Confirm Classes對話框(見圖3),接受默認值并按OK,出現Add Member Vari-able對話框,可將此變量命名為m_MyControl,再按OK,你會發現CMyATLActiveX類現在已是項目的一部分了。

3.3響應事件

響應來自ActiveX控件的事件,右擊對話框,在彈出的菜單中選擇Events項,在彈出的對話框中的Object to Handlers列表框中選擇IDC_MYATLACTIVEXCTLl,在事件列表框中選擇我們上面建立的事件ReturnData,然后單擊Add and Exit,系統自動為我們把事件處理函數添加到項目中,我們把此函數進一步完善(黑體部分為自己加入)。

響應來自窗體的事件,雙擊對話框資源上的單選按鈕,系統自動為我們把事件處理函數添加到項目中,我們把此函數進一步完善(黑體部分為自己加人)。

本程序在VC++6.0下調試通過,運行結果如圖4所示,用鼠標單擊不同的單選按鈕,ActiveX控件中蘭色小方框的數目隨著改變,同時反映從控件返回信息的只讀文本框的內容也隨著變化,從而實現了與控件的通訊。

猜你喜歡
通訊
《茶葉通訊》簡介
《茶葉通訊》簡介
通訊報道
《茶葉通訊》簡介
《茶葉通訊》簡介
關于加注“通訊作者”的要求
科技與通訊
本期通訊之星:郭雨薇
本期通訊之星:王寧
通訊簡史
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合