第十八章、ActiveX控件
第十八章、ActiveX控件
ActiveX控件可以看作是一個(gè)極小的服務(wù)器應(yīng)用程序,他不能獨(dú)立運(yùn)行,必須嵌入到某個(gè)容器程序中,與該容器一起運(yùn)行。
18.1ActiveX控件
在本章中我們用VB作為ActiveX控件的測(cè)試容器。首先新建一個(gè)VB應(yīng)用程序,加載一個(gè)ActiveX控件:Project\Components,彈出如下組件對(duì)話框,如圖這個(gè)對(duì)話框列出了本機(jī)可用的ActiveX控件,選擇Microsoft Winsock Control6.0這一控件,該控件對(duì)應(yīng)的文件是MSWINSOCK.OCX,OCX是ActiveX控件的一種后綴名,ActiveX控件的后綴名也可以是DLL。添加所需的空間后,VB的工具箱上面就多了Winsock控件,如圖。
接下來選擇View\Object Browser菜單項(xiàng),將出現(xiàn)對(duì)象瀏覽器對(duì)話框,在All Library下拉列表中選擇MSWinsockLib這一項(xiàng),這就是剛剛添加的Winsock控件,選擇Winsock;右邊窗格中綠色小方塊是該控件提供的方法,小手圖標(biāo)是控件提供的屬性,閃電圖標(biāo)是控件提供的事件。一個(gè)典型的ActiveX控件,具有方法、屬性和事件三個(gè)屬性。如圖。
18.1.1MFC ActiveX ControlWizard
現(xiàn)在利用VC++開發(fā)一個(gè)時(shí)鐘ActiveX控件,新建一個(gè)MFC ActiveX ControlWizard工程,名稱為Clock。單擊Finish,該工程自動(dòng)生成了三個(gè)類,如圖。
CClockCtrl類從CWnd類派生的,在該類中提供了一個(gè)OnDraw函數(shù),如果控件需要輸出圖形,就可以在這個(gè)函數(shù)中編寫相應(yīng)的實(shí)現(xiàn)代碼。
CClockCtrl類頭文件中不僅提供了一個(gè)消息映射,還提供了一個(gè)調(diào)度映射和事件映射。調(diào)度映射是MFC提供的一種映射,主要是為了外部程序可以方便地訪問控件的屬性和方法;而事件映射也是MFC提供的一種映射機(jī)制,讓控件可以向包含它的容器發(fā)送事件通知。
CClockPropPage類派生于CDialog類,CClockPropPage類用來顯示Clock控件的屬性頁的,在該類的頭文件中,該類與一個(gè)ID為IDD_PROPPAGE_CLOCK的對(duì)話框資源相關(guān)聯(lián)。
DClock和DClockEvents,他們前面放著一個(gè)平放的小勺的圖標(biāo),該圖標(biāo)對(duì)應(yīng)的項(xiàng)是接口。接口是控件與外部程序進(jìn)行通信的協(xié)議,在接口中定義的所有函數(shù)都是純虛函數(shù),這些函數(shù)的實(shí)現(xiàn)都是在CClockCtrl類中完成的。
ActiveX控件實(shí)現(xiàn)接口所暴露出來的方法,而容器調(diào)用這些方法。我們先運(yùn)行這個(gè)程序,在該工程所在的目錄下生成了一個(gè)Clock.ocx,這個(gè)就是程序生成的ActiveX控件文件,只需要將這個(gè)文件傳遞給使用方,經(jīng)過注冊(cè)之后就可以使用該控件了。
18.1.2ActiveX控件的測(cè)試
運(yùn)行程序就會(huì)看到如圖。因?yàn)锳ctiveX控件不能獨(dú)立運(yùn)行,它必須嵌入到一個(gè)容器中才能運(yùn)行,單擊對(duì)話框上面一個(gè)右箭頭的按鈕,彈出如圖快捷菜單。選擇相應(yīng)的控件,單擊OK關(guān)閉對(duì)話框,就會(huì)打開ActiveX Control Test Container應(yīng)用程序,如圖。
于是就可以加載特定的ActiveX控件了,方法Edit->Insert New Control,打開如圖所示對(duì)話框,然后在左側(cè)的列表框中任意選擇一個(gè)控件,然后快速連續(xù)地按下鍵盤上C、L、O鍵,然后直接定位到我們剛剛生成的Clock控件,單擊OK,該應(yīng)用程序就加載了Clock控件,該控件的功能就是繪制一個(gè)橢圓。
同樣地也可以在VB中測(cè)試,在VB中打開組件對(duì)話框,快速連續(xù)地按下鍵盤上C、L、O鍵,然后直接定位到我們剛剛生成的Clock控件,選中該控件,單擊確定,接著從工具箱中單擊該控件圖標(biāo),進(jìn)行拖放,保存當(dāng)前的VB程序,工程名為VBTest。
18.1.3ActiveX控件的注冊(cè)
在開始/運(yùn)行中,regsvr32 +控件的完整路徑,回車,就會(huì)加載該控件。regsvr32/u +控件的完整路徑,回車,就會(huì)刪除該控件。所有的ActiveX控件必須在注冊(cè)之后才能使用。
后面的用到較少就忽略。
總結(jié)
以上是生活随笔為你收集整理的第十八章、ActiveX控件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GPGPU,一个不错的开源工程 vort
- 下一篇: 彻底解决Eclipse自动补全变量名问题