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