电竞比分网-中国电竞赛事及体育赛事平台

分享

一步一步學習C++的ActiveX網(wǎng)頁控件開發(fā)

 孫中熙——路 2011-06-17
http://hi.baidu.com/redtramp/blog/item/318b1708344b84dc63d986d9.html

本文將首先介紹如何使用Visual Studio開發(fā)一個簡單的ActiveX控件,然后介紹ActiveX控件開發(fā)相關的基礎知識,比如方法,屬性和事件等,最后介紹如何利用這些知識,實現(xiàn)ActiveX控件和網(wǎng)頁頁面之間的通信。


MyActiveX控件的效果圖

簡介

ActiveX是由Microsoft在90年代中期提出的一項技術。利用ActiveX技術,開發(fā)者可以創(chuàng)建像Java小程序applet一樣的小型應用程序。這些應用程序可以被下載然后在Microsoft的瀏覽器中運行。這篇文章是為那些想學習如何開發(fā)他們的第一個ActiveX控件的Visual C++開發(fā)者準備的。

當我自己嘗試學習這些技術的時候,我發(fā)現(xiàn)很多針對ActiveX技術的資料都已經(jīng)不再適用了,都已經(jīng)過時了,或者丟失了很多關鍵性的信息,這些都使得我在為我的項目創(chuàng)建一個ActiveX控件的時候,變得困難重重。這篇文章將幫助你實現(xiàn)ActiveX網(wǎng)頁控件開發(fā)的快速入門。本文將首先介紹如何使用Visual Studio開發(fā)一個簡單的ActiveX控件,然后介紹ActiveX控件開發(fā)相關的基礎知識,比如方法,屬性和事件等,最后介紹如何利用這些知識,實現(xiàn)ActiveX控件和網(wǎng)頁頁面之間的通信。

另外,你也將學習到如何在默認的Internet Explorer安全設置下取消掉控件加載過程中的警告或者錯誤提示,使你的控件成為一個“安全”的ActiveX控件。

在本文中,我們將創(chuàng)建一個實際的ActiveX控件。在控件加載的過程中,它將顯示一個動態(tài)的進度條,告訴用戶控件正在加載并處理信息。同時,這個控件也將展示如何在ActiveX控件和Web頁面之間傳遞信息。本文將引導你一步步地利用Microsoft Visual Studio 2005完成ActiveX控件的開發(fā)工作。

創(chuàng)建ActiveX控件

要創(chuàng)建一個ActiveX控件,首先啟動Visual Studio 2005,執(zhí)行下面這些步驟:

1.選擇“文件”菜單,然后選擇“新建”->“項目”。  

2.在“新建項目”對話框中,如下圖1所示,選擇“Visual C++”分類下的“MFC”。然后選擇“MFC ActiveX控件”作為項目模板。  

3.將新項目命名 為“MyActiveX”,然后選擇項目的保存目錄,最后點擊“確定”按鈕,關閉“新項目”對話框,進入“MFC ActiveX控件”向導。


圖1 新項目對話框

4.在“MFC ActiveX控件”向導中,如下圖2所示,選擇左側的“控件設置”,進入控件參數(shù)設置頁

5.在“Create control based on”下拉列表中選擇“STATIC”。這表示我們使用的是一個靜態(tài)控件,因為我們僅僅是顯示輸出而不接收輸入。

6.在下面的“Additional features”的所有選項中,我們確認選中“Activates when visible”和“Flicker-free activation”這兩個選項,同時確認“Has an About box dialog”選項沒有被選中。  


圖2 MFC ActiveX 控件向導對話框

7.點擊“Finish”按鈕關閉整個“MFC ActiveX控件向導”對話框,然后向導就會為我們創(chuàng)建整個項目的源代碼。默認情況下,向導創(chuàng)建的項目是使用共享MFC DLL的,這里我們需要改變這一設置。因為如果目標機器上沒有安裝MFC DLL,那么ActiveX控件就不會運行。我們常??吹揭恍┚W(wǎng)頁上的ActiveX控件被顯示為紅色的叉叉,很多都是這個原因造成的。

為了解決這個問題,我們使用靜態(tài)的MFC DLL。從Visual Studio的菜單中選擇“項目”->“屬性”,然后切換到“配置屬性”->“普通”,在配置頁面中的“Use of MFC ”下拉列表中,將“use MFC in a shared DLL”切換成“Use MFC in a Static Library”就可以了。

8.向導創(chuàng)建了如下三個類:
CMyActiveXApp – 這是從COleControlModule派生的ActiveX控件應用程序類。通過這個類,我們可以得到一個OLE控件對象,這個對象包含了對控件進行初始化(InitInstance)和對控件進行清理(ExitInstance)的成員函數(shù)。
CMyActiveXCtrl – 這個類是從COleControl派生的。我們將在這個類中實現(xiàn)控件的主要功能。
CMyActiveXPropPage – 這個類從COlePropertyPage派生的。它被用來管理控件的屬性對話框。MFC ActiveX控件向導已經(jīng)為我們創(chuàng)建了一個默認的屬性對話框,我們只需要在其基礎上進行修改就可以了。

為ActiveX控件創(chuàng)建網(wǎng)頁

光完成了ActiveX控件還不行,因為ActiveX控件無法單獨運行,所以我們還需要為ActiveX控件創(chuàng)建相應的測試頁面。如果想為我們的ActiveX控件創(chuàng)建一個默認的測試頁面,最佳的工具就是Microsoft ActiveX Control Pad。這是一個免費的工具,我們可以從微軟的網(wǎng)站上下載得到。
我們需要下載ActiveX Control Pad并將它安裝在我們的開發(fā)機器上。同時為了簡化測試工作,我們還需要在同一臺機器上安裝微軟的IIS服務器作為Web服務器。

當我們第一次運行ActiveX Control Pad的時候,它將創(chuàng)建一個默認的HTML頁面。接下來,我們需要將ActiveX控件插入到這個頁面中。在<BODY>標簽內(nèi)的某個位置右鍵單擊,選擇“Insert ActiveX Control”,在彈出的“Insert ActiveX Control”對話框中,選中我們剛剛創(chuàng)建的ActiveX控件MyActiveX,然后點擊“OK”關閉對話框,將ActiveX控件插入到頁面中。

 


圖5 插入ActiveX控件

ActiveX Control Pad提供了兩個對話框,供我們對ActiveX控件的各個屬性進行修改編輯。屬性對話框用于修改ActiveX控件的各項屬性。而“編輯ActiveX控件(Edit ActiveX Control)”對話框用于手動地對ActiveX控件進行修改。當然,我們也可以不使用對話框,直接編輯HTML代碼達到相同的效果。在代碼中找到OBJECT ID標簽,如下圖6所示,修改它的尺寸參數(shù)為“WIDTH=350”和“HEIGHT=50”。完成代碼的修改后,將這個文件保存為myactivex.htm,放置到IIS服務器的網(wǎng)站根目錄wwwroot下。


圖6 在ActiveX Control Pad中編輯頁面

現(xiàn)在,我們就可以使用IE打開http://localhost/myactivex.htm對ActiveX控件進行測試了。在ActiveX控件加載的過程中,如果你得到一些警告消息,點擊“OK”略過就可以了。正常情況下,你將看到頁面中顯示的一個進度條GIF動畫。如果你沒有看到動畫,或者是僅僅在ActiveX控件的位置顯示一個紅色的叉叉,這可能是你的瀏覽器的安全設置,阻止了ActiveX控件的加載和運行。要解決這個問題,請修改你的瀏覽器的安全設置,使其所有關于ActiveX的選項都在“允許(enabled)”狀態(tài)。


圖7 瀏覽器中的MyActiveX控件

接下來,我們將讓我們的控件成為一個“簽名的”或者是“安全的”控件,以此來解決在ActiveX控件加載過程中所產(chǎn)生的那些警告信息。構建一個“簽名的”ActiveX控件。要想創(chuàng)建一個“簽名的”ActiveX控件,你必須從一些認證機構,例如Thawte,Verisign和GeoTrust,獲得代碼簽名證書(Code Signing Certificate)。通過這項服務,他們將對你進行認證同時為你提供用于對ActiveX控件進行簽名的證書文件。這些用于應用程序簽名的證書文件包括mycert.spc和mykey.pvk.兩個文件。

為了對ActiveX應用程序進行簽名,我們需要將這個程序的所有組件打包成CAB文件。這個CAB文件將被從網(wǎng)站上下載到目標機器上,然后ActiveX控件會通過下載的CAB文件被安裝到目標機器上。要啟用這項功能,我們必須在ActiveX控件的版本信息VERSIONINFO結構體中定義OLESelfRegister變量。在VS 2003及其之前的Visual Studio之中,這一變量是被自動添加的。但是在Visual Studio 2005中,默認情況下VERSIONINFO結構體中并不包含這一變量,我們需要按照下面的示例手動添加OLESelfRegister這一變量:

VS_VERSION_INFO VERSIONINFO
FILEVERSION
1,0,0,1
PRODUCTVERSION
1,0,0,1
FILEFLAGSMASK
0x3fL
#ifdef _DEBUG
FILEFLAGS
0x1L
#else
FILEFLAGS
0x0L
#endif
FILEOS
0x4L
FILETYPE
0x2L
FILESUBTYPE
0x0L
BEGIN
     BLOCK
"StringFileInfo"
     BEGIN
         BLOCK
"040904e4"
         BEGIN
             VALUE
"CompanyName", "TODO: <Company name>"
             VALUE
"FileDescription", "TODO: <File description>"
             VALUE
"FileVersion", "1.0.0.1"
             VALUE
"InternalName", "MyActiveX.ocx"
             VALUE
"LegalCopyright",
                  
"TODO: (c) <Company name>. All rights reserved."
             VALUE
"OLESelfRegister", "\0"
             VALUE
"OriginalFilename", "MyActiveX.ocx"
             VALUE
"ProductName", "TODO: <Product name>"
             VALUE
"ProductVersion", "1.0.0.1"
         END
     END
     BLOCK
"VarFileInfo"
     BEGIN
         VALUE
"Translation", 0x409, 1252
     END
END

在簽名ActiveX控件之前,ActiveX控件應該被打包成CAB文件。這個CAB文件同樣還包含一個INF文件,它將用于安裝你的ActiveX控件。要創(chuàng)建CAB文件,你需要Microsoft Cabinet Software Development Kit中的cabarc.exe。下面的INF文件演示了如何將我們的MyActiveX控件打包到CAB文件中。對于其中的CLSID,你需要將其修改為跟之前我們使用ActiveX Control Pad創(chuàng)建的HTML頁面中OBJECT ID相同的值。

[Add.Code]
myactivex.ocx
=myactivex.ocx
myactivex.inf
=myactivex.inf
[myactivex.ocx]
file
=thiscab
clsid
={36299202-09EF-4ABF-ADB9-47C599DBE778}
RegisterServer
=yes
FileVersion
=1,0,0,0
[myactivex.inf]
file
=thiscab

我們可以通過下面的DOS命令創(chuàng)建CAB文件。這里需要注意的是:OCX文件和INF文件必須跟你所執(zhí)行的cabarc.exe在同一個目錄,否則CAB文件在被下載后將無法正確的解壓縮。這也是一個導致ActiveX控件被顯示為紅色叉叉的重要原因。
cabarc -s 6144 N myactivex.cab myactivex.ocx myactivex.inf要對我們剛剛創(chuàng)建的CAB文件進行簽名,我們需要Microsoft MSDN為我們提供的工具signcode.exe 。(請查閱本文末尾與“Signing and Checking with Authenticode”相關的參考資料) 。通過這個工具,我們就可以用我們從認證機構獲得的代碼簽名證書對CAB文件進行簽名了。下面是一個使用signcode對myactivex.cab進行簽名的例子:

signcode -n "myactivex" -i
http://www. -spc mycert.spc -v mykey.pvk -t http://timestamp./scripts/timstamp.dll myactivex.cab

   在上面的例子中,http://www.應該被替換成你的ActiveX控件的說明頁面,通過這個頁面,你可以為用戶提供更多的關于這個控件的信息。

要使用簽名過后的CAB文件,首先我們需要將myactivex.cab復制到web服務器的一個合適的目錄下,然后我們修改Web頁面中的OBJECT ID標簽,添加一個參數(shù)CODEBASE指向CAB文件。具體代碼如下圖8所示。這樣,當你再使用IE打開這個頁面時,CAB文件會被下載,然后ActiveX控件會被正確的安裝到你的機器上。在安裝的過程中,再也不會彈出提示未簽名ActiveX控件的警告信息了。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多