前言:ocx是ocx控制項的副檔名,OCX 是物件類別擴充組件。如果你用過Visual Basic或者Delphi一類的可視化編程工具,那麼對控制項這個概念一定不會陌生,就是那些工具條上的小按鈕,如EditBox,Grid,ImageBox,Timer等等。每個控制項都有自己的事件、方法和屬性。使用了控制項的編程非常容易。首先,在程式的設計階段可以設定一些屬性,如大小,位置,標題(caption)等等;在程式運行階段,可以更改這些屬性,還可以針對不同的事件,調用不同的方法來實現對該控制項的控制。控制項就好像一塊塊的積木,程式要做的事只是將這些積木搭起來。控制項的最大好處是可以重複使用,甚至可以在不同的程式設計語言之間使用,例如你可以在VB中嵌入用VC開發的控制項。
那麼下面開始詳細介紹如何產生你想要的“*.ocx”檔案:
1、從最簡單的開始入手
1.1 如何建立Ocx工程
建立項目->MFC ActiveX WinZard
在這裡解決方案的名字我取名為SIP_OCX_DEMO,點擊“確定”,在出現的視窗中直接點擊“完成”。VC++會自動產生一些檔案,這些檔案就構成了ActiveX的基本模板,檔案的主要結構如下:
注意上面紅框標註的檔案是非常重要的部分,直接編譯會在Debug目錄下產生一個名為“SIP_OCX_DEMO.ocx”的控制項註冊檔案,然後利用“regsvr32”命令就可以實現本機對此控制項的註冊,就可以使用本語言或者跨語言編寫程式時引用此控制項來實現相應的功能(當然現在沒有任何功能)。
1.2 如何調試
VC++6.0內建有一個調試控制項的工具“ActiveX控制項測試容器”,通過三種方式可以開啟:
1.點擊“調試”按鈕,然後瀏覽"C:\Program Files\Microsoft Visual Studio\Common\Tools\TSTCON32.EXE“;
2. 系統的“開始“-》“程式”-》“Microsoft Visual C++ 6.0”-》“Microsoft Visual C++ 6.0 Tools”-》“Active Control Test Container”;
3. VC++開發環境中的“工具”-》“ActiveX Control Test Container”。
但是如果編譯環境是VS2005呢?VC6.0時代的第一種調試方法還是可行的,點擊調試按鈕,如下所示:
在上面的可執行檔名稱的下拉框中有ActiveX Control Test Container的選項,選擇點確定即可。當然還有別的手段,後面會提到。用上面的方法調試出下面視窗:
右擊空白地區,插入控制項,然後會彈出下面的對話方塊:
選中指定控制項,點擊確定,控制項就被載入到此工具中,然後可以通過這個工具來看此控制項的相關事件響應等等。
2、自訂方法和事件
1.點擊“視圖”,開啟“類別檢視”視窗;其中App類負責啟動初始化與結束時清理工作;Ctrl類是我們主要使用的;PropPage是屬性類。
注意紅框所示內容(以-lib結尾的檔案)即為供第三方使用的借口和事件通知的介面的所在位置。
2.展開“ActiveXDemoLib”項,選中“_DActiveXDemo”項。點擊滑鼠右鍵,選擇“添加”下的“添加方法”。
3.開啟添加方法嚮導視窗。因為是添加一個無形參無傳回值的測試方法,所以設定的傳回型別為void,方法名設為test。
4.其它為預設設定,點擊“完成”按鈕完成添加方法。接下來我們開啟“方案總管”開啟“SIP_OCX_DEMOCtrl.cpp”檔案。
5. 開啟程式碼檢視,我們會發現VC2005已經為我們添加了一個“test”方法;
同時在.idl檔案中會發現:
這裡就是供第三方整合的介面列表。
3、自訂功能實現
首先為了實現這個功能,我需要一個主對話方塊,當IE載入這個ActiveX時會把這個對話方塊圖顯示出來。在資源檢視中選擇Dialog右鍵點擊添加資源:
然後會出現如下視窗:
選擇建立,在產生的屬性視窗中將ID改為IDD_MAINDIALOG,同時把下面的幾種屬性設定一下:
Border :None
Style :Child
Visible :True
為了以後擴充的要求,加入了一個新的類“CMainDialog”類。操作:右鍵點一個這個對話方塊,然後選擇“添加類“:
為了能夠在Ctrl類中使用這個對話方塊,在SIP_OCX_DEMOCtrl.h增加一個成員變數“m_MainDialog”。
由於這個變數和對話方塊資源與關聯,在建立控制項時需要把這個對話方塊也建立出來。這個操作要用訊息來驅動。單擊SIP_OCX_DEMOCtrl,在其屬性視窗中的訊息視窗中有一個訊息叫WM_CREATE,可以讓VS2005建立一個函數OnCreate()。
在這個函數體中,添加如下代碼,來建立這個對話方塊。
[cpp]
view plaincopyprint?
- m_MainDialog.Create(IDD_MAINDIALOG, this);
這裡自訂的功能是SIP的一個簡單呼叫,這裡不作詳細說明。
4.控制項的使用方法
ocx控制項的安裝方式有很多種,這裡介紹最簡單的一種。
1、進入命令列;
2、進入Ocx組建目錄;
3、regsvr32.exe .ocx檔案;
4、建立html檔案調用本地Ocx;
由於是本地註冊,開啟註冊表,開始 菜單 -》 運行 -》regedit -》用控制項的名稱SIP_OCX_DEMO尋找,可以找到
可以發現其classid 的值為BFE10FBC-C682-4423-8C6E-7A38219FA064,和SIP_OCX_DEMO.ocx 檔案同一路徑下編輯一個 test.html檔案,內容如下:
[html]
view plaincopyprint?
- <OBJECT id="SIP_OCX_DEMO" name="SIP_OCX_DEMO.ocx"
- classid="clsid:BFE10FBC-C682-4423-8C6E-7A38219FA064"
- width="100%" height="250">
5、儲存後用IE 瀏覽器開啟選擇允許使用ActiveX 控制項即可看到控制項的面板;
在這裡本文告一段落,關於更深入的事件和屬性,以及ocx控制項的安全發布的內容會另起兩個章節詳細說明。
以下是關於ocx安全發布的博文,歡迎指正:
ocx控制項MSI打包升級方案
OCX控制項CAB打包手冊及升級方法
ActiveX控制項實現安全的初始化和指令碼
ActiveX控制項屬性:自訂屬性的使用