資源描述:
《activex控件的使用和創(chuàng)建》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第十二章ActiveX控件的使用和創(chuàng)建近年來,軟件產(chǎn)業(yè)已經(jīng)發(fā)生了一場(chǎng)革命性的變化。軟件的制作和打包方式已經(jīng)不再是所有的應(yīng)用程序都必須從源代碼編譯鏈接成一個(gè)完整的、很大的可執(zhí)行代碼文件,而是大多數(shù)應(yīng)用程序都可以由一些較小的構(gòu)件組成。這些小的構(gòu)件,通常稱為組件。這些組件可以用多種不同的程序語言創(chuàng)建,且可以具有多種不同的的形式。最為流行的組件之一便是ActiveX控件。組件不但可以作為最終軟件產(chǎn)品提供給其他程序設(shè)計(jì)人員,而且在大型軟件開發(fā)中,使用組件也是組織不同分工的程序設(shè)計(jì)人員共同完成整個(gè)軟件設(shè)計(jì)開發(fā)的重要策略和方法。本章的學(xué)習(xí)目的是:掌握如何使用ActiveX控件,以便在軟件開
2、發(fā)中使用第三方提供的產(chǎn)品化組件和如何創(chuàng)建自己的ActiveX控件,以便開發(fā)產(chǎn)品化組件,提供給其他程序設(shè)計(jì)者。本章的主要內(nèi)容包括:·什么是ActiveX控件以及它們是如何工作的。·如何在項(xiàng)目工作區(qū)中添加ActiveX控件?!と绾卧赩isualC++應(yīng)用程序中使用ActiveX控件?!と绾握{(diào)用與ActiveX控件相關(guān)聯(lián)的各種方法?!と绾翁幚碛葾ctiveX控件激活的事件?!と绾斡肰isualC++AppWizard建立ActiveX控件項(xiàng)目?!と绾斡肅lassWizard向ActiveX控件添加屬性和方法。·如何用VisualC++提供的工具測(cè)試自己的ActiveX控件。12.1
3、什么是ActiveX控件在介紹ActiveX控件之前有必要了解另外兩個(gè)編程技術(shù)概念:·OLE(ObjectLinkedandEmbeded)對(duì)象連接嵌入是Microsoft基于對(duì)象的技術(shù)。該技術(shù)用于跨越進(jìn)程和機(jī)器邊界的數(shù)據(jù)信息和操作方法的共享。不過最初的OLE僅僅允許把不同的應(yīng)用程序創(chuàng)建的文檔組合成一個(gè)單一文檔?!OM(ComponentObjectModel)組件對(duì)象模型是遵循OLE基本技術(shù)的對(duì)象模型。一個(gè)COM對(duì)象是一個(gè)對(duì)象定義的實(shí)例,該對(duì)象定義指定了該對(duì)象的數(shù)據(jù)和一個(gè)或多個(gè)作用于該對(duì)象的接口執(zhí)行方法??蛻舫绦蚺cCOM對(duì)象之間的相互作用只能通過COM對(duì)象的接口實(shí)現(xiàn)。Ac
4、tiveX控件就是一組封裝在COM對(duì)象中的功能模塊。這個(gè)COM對(duì)象是獨(dú)立的,但并不能單獨(dú)運(yùn)行,而只能在ActiveX容器中運(yùn)行,如VisualC++或VisualBasic應(yīng)用程序,這一點(diǎn)很像在組合設(shè)備中插入具有特定功能的組件,例如在組合式音響中,插入一個(gè)DVD播放組件。12.1.1ActiveX和IDispatch接口每個(gè)COM對(duì)象都有一些標(biāo)準(zhǔn)接口,例如,IUnknown接口,該接口用來詢問是否找到了該組件所支持的其他接口。每個(gè)接口支持一組特定的功能,例如,可以用一個(gè)接口來處理控件的可視外觀,一個(gè)接口來控制控件外觀如何與插入該控件的應(yīng)用程序進(jìn)行交互,一個(gè)接口來觸發(fā)插入該控件
5、應(yīng)用程序中的事件,等等。ActiveX技術(shù)是建立在微軟的COM技術(shù)之上,并使用COM的接口和交互模型使ActiveX控件與插入控件的應(yīng)用程序進(jìn)行完全無縫的集成。COM技術(shù)奠定了構(gòu)建ActiveX對(duì)象的方式及設(shè)計(jì)ActiveX接口的方法。ActiveX技術(shù)定義了建立于COM之上的層面、各種對(duì)象應(yīng)該支持什么樣的接口以及如何與不同類型的對(duì)象交互。ActiveX控件的關(guān)鍵技術(shù)之一是自動(dòng)。所謂“自動(dòng)”可描述為:·將一個(gè)應(yīng)用程序中嵌入另一個(gè)應(yīng)用程序?!ぎ?dāng)用戶的操作涉及到被嵌入者的功能時(shí),激活被嵌入者,并控制被嵌入者的用戶接口或文檔部分,同時(shí)進(jìn)行被嵌入者自身的更改?!ぎ?dāng)用戶將操作轉(zhuǎn)移到應(yīng)用
6、程序中非嵌入程序的控制部分時(shí),被嵌入者自行關(guān)閉(例如在word應(yīng)用程序中自動(dòng)嵌入Excel電子表格應(yīng)用程序)。實(shí)現(xiàn)自動(dòng)工作的關(guān)鍵之一是特殊(調(diào)度)接口IDispatch。ActiveX控件可以提供的所有方法有各自的唯一標(biāo)識(shí)值DISPID。這些標(biāo)識(shí)值被存放在用來查找特定方法的標(biāo)識(shí)列表中。IDispatch接口由一個(gè)指示方法的標(biāo)識(shí)列表和IDispatch接口提供的方法組成。當(dāng)獲取一個(gè)特定方法的DISPID之后,就可以將該方法的DISPID作為參數(shù),通過調(diào)用IDispatch接口的方法Invoke來實(shí)現(xiàn)調(diào)用DISPID所標(biāo)識(shí)的指定方法。下圖示意性描述了IDispatch接口如何使用
7、Invoke方法來運(yùn)行ActiveX控件提供的方法,實(shí)現(xiàn)的ActiveX控件的自動(dòng)化。DISPID1DISPID2DISPID3DISPID4DISPIDnActiveX對(duì)象IDispatchvtable客戶程序IDispatch::Invoke(DISPID)Invoke(){switch(DISPID3){case1:MethodX();case2:MethodY();case3:MethodZ();…}調(diào)度接口12.1.2ActiveX容器和服務(wù)器任何可以嵌入另一對(duì)象的ActiveX對(duì)象都是Act