1. 程式人生 > >基於ActiveX 控制元件開發動態Web頁

基於ActiveX 控制元件開發動態Web頁

  Web頁面的開發主要分為三類:靜態Web頁面、半動態Web頁面以及Client端動態頁面。本文重點論述基於ActiveX Control(控制元件)動態實時頁面的開發。

  ActiveX控制元件用於Web的過程是將控制元件嵌入主頁中,使用者通過瀏覽器訪問該主頁時,將主頁中的控制元件下載,並在使用者機器上註冊,以後就可在使用者的瀏覽器上執行。控制元件下載一次後就駐留在使用者本地機器上,下次再訪問相同的主頁時,可不再下載該控制元件,而是直接執行使用者本地的控制元件。這裡控制元件容器就是瀏覽器,使用者不需要通過瀏覽器呼叫控制元件的屬性或方法。因此,開發面向Web的ActiveX控制元件比開發桌面的控制元件還要簡單些,所複雜的是如何將該控制元件很好地嵌入主頁,使使用者能正常瀏覽。下面介紹這個問題。

在Web頁中加入ActiveX 控制元件
  在HTML頁面中使用ActiveX控制元件包含三個基本操作:將控制元件放入HTML中;將該控制元件下載給使用者;在使用者機器上安裝該控制元件。如果只是針對IE使用者,在HTML中插入ActiveX控制元件就比較簡單;如果同時兼顧IE和Netscape使用者,則要做更多工作。大家知道,HTML檔案由文字和各種標誌(tags)組成,ActiveX 控制元件對於IE在HTML中的標誌是<OBJECT>,該標記有幾個重要的引數特性,它們是:

  1.ID:為控制元件提供一個標識名稱,為HTML程式碼提供一種訪問該控制元件的方式。

  2.CLASSID:是該控制元件唯一的UUID,告訴IE裝入哪個物件。如果使用已經開發好的控制元件,它的CLASSID可以通過呼叫Win95或NT下的應用Regedit來查詢。從開始選單中執行該程式,展開HKEY_CLASSES_ROOT項,可以看到按字母順序排列的登錄檔,找到需要使用的控制元件名,例如WClnt,展開時可看到一個CLSID資料夾,裡面就是該控制元件的CLASSID。

  如果是自己用VC開發控制元件,該UUID可以在ActiveX控制元件專案中的ODL(物件描述庫)檔案中找到;通過檢視控制元件的類資訊註釋來定位特定控制元件的UUID,例如,要找到CMyControl控制元件的UUID,則需要找到以下程式碼:

  // Class information for CMyControl

  [uuid (051C4748-1262-11D2-87C1-00A024D948FB),

  licensed,

  helpstring(“CmyControl Control”), control ]

  uuid後面括號中的內容就是該控制元件的UUID。

  3.CODEBASE:如果在使用者機器上沒有控制元件的當前版本,該引數告訴使用者瀏覽器在哪裡可找到要下載的控制元件和最新版本號.當控制元件作了修改後,可以更改版本號強制使用者重新下載。

  4.PARAM:該標記用於設定控制元件的初始屬性值,它有兩個特性:Name和value,即屬性名稱和屬性值。

  此外還有一些標記,如:Width表示該控制元件所佔的寬度,Height表示高度等,總體來說,這樣一個插入控制元件的HTML程式碼和插入Java Applet的HTML程式碼非常相似。

  下面是一個嵌有ActiveX控制元件的HTML程式碼示例:

 

ID=“CMyControl”

CLASSID=“clsid:051C4748-1262-11D2-87C1-00A024D948FB ”

CODEBASE=“
http://www.mysite.com.cn/ocxdir/mycontrol.ocx
#version=1,0,0,1”

WIDTH=400

HEIGHT=200

ALIGN=center

HSPACE=0

VSPACE=0



  如果希望控制元件還能在Netscape中執行,除了Netscape需加裝外掛外,HTML也要加一些附加標記,下面的例子中EMBED段就是為Netscape加上的。如果使用MFC開發OCX控制元件,則少數使用者第一次訪問時除了下載OCX檔案外,還要下載相應的MFC DLL,下載量變大,這時可將相關檔案在伺服器端打包成可以在客戶端自解壓安裝的CAB檔案。經過修改後的HTML程式碼段如下:

<ALIGN=“CENTER” CLASSID=“clsid:

7BCA18C6-2178-11D2-87C1-00A024D948FB”

WIDTH=“1200” HEIGHT=“900” ID=“marquee”

CODEBASE=“
http://218.168.188.188/scadaweb/


WClnt.cab#version=1,0,0,1”>

<EMBED ALIGN=“CENTER”CLASSID=“clsid:7BCA18C6- 2178-11D2-87C1-00A024D948FB”

WIDTH=“1200” HEIGHT=“900” ID=“marqueequot;”

CODEBASE=“http://218.168.188.188/scadaweb/

WClnt.OCX#version=1,0,0,1”

TYPE=“application/oleobject” >

實時動態頁面的實現方案
  對實時動態頁面的要求多產生於一些要求自動更新實時資料的應用中,如電網監控、股市監測等。具體要求是:使用者只需選取希望瀏覽的圖表,但無需介入操作,該圖表就能根據實時資料不斷更新,使用者總能觀察到最新情況。

  要實現上述功能,結構上有兩種方案:一種是設定一箇中介伺服器,該伺服器作為控制元件和後臺系統資訊交流的中介;另一種是不設中介伺服器,但在提供實時資料的後臺伺服器上留出供控制元件通訊用的資料介面,控制元件可以直接從後臺伺服器上定時獲得當前實時資料。按資料提供方式分也有兩種:一種是由客戶端定時向伺服器發出請求,指明需要的實時資料,伺服器收到請求後將滿足請求的動態資料傳送至相應客戶;另一種是客戶端只請求一次,伺服器端便定時將滿足請求的實時資料傳到客戶端,直到客戶更換要顯示的圖表或停止重新整理。上述各方案都有其優點和侷限,在應用中可考慮實際情況採用相應方案。

  工作流程為:使用者先從Web伺服器上下載包含ActiveX 控制元件的網頁,控制元件隨即在客戶機上註冊執行,並通過Winsock同中介伺服器或直接同提供實時資訊的網,如股票資訊網相連線,定時取得動態實時資料,並重新整理顯示。在這個體系中,客戶有兩條線路獲得資訊,一條是和Web Server的連線,從這條線上使用者訪問主頁;另一條就是控制元件和後臺資訊網的連線,從這條線路上使用者可以訪問實時資料。後一條線路用Winsock建立,傳輸速度遠大於前一條線路,且控制靈活、效率高,不和主頁下載爭資源。通過這條線路,使用者甚至可以傳送遠端控制資訊實現遙控操作。

利用MFC開發ActiveX控制元件
  利用VC5.0開發的這種控制元件,功能可擴充套件性強,理論上獨立的VC5.0程式具有的功能,該控制元件都能實現,例如控制元件直接繪製瀏覽器,可以使用OpenGL等相簿,圖形影象功能強大。實時資料重新整理頻率理論上可達毫秒級,使用者通過滑鼠可以實現各類互動操作,如旋轉、縮放,圖2就是一幅GL圖形,並有一個縮放工具條進行縮放操作。如果是在計算機上觀看,可以看到這幾個三維圖在不斷旋轉。

  應該說,較好的開發工具可直接用API程式設計或使用ATL模板庫,利用MFC開發ActiveX控制元件不是一個好的選擇,因為控制元件執行需要MFC DLL的支援。假如客戶機器上沒有這些類庫(這種情況很少,但確實存在),第一次下載就要花費些工夫。不過對於熟悉MFC的開發員來說,這些問題相對MFC提供的便利來說都是可以忽略的。

  由於VC5.0對ActiveX控制元件的開發提供了許多便利,所以開發一個ActiveX控制元件並不像許多人想象中的那麼困難複雜,通過VC 5.0的AppWizard,實現控制元件的主類從ColeControl類派生出來,該類則是CWnd的一個子類,所以你可以像對視窗類程式設計一樣對這個主類程式設計。為了實現上面提及的功能,首先必要過載它的OnDraw函式加入需要繪製的物件,加入Winsock類(CSocket或CAsyncSocket),以實現與後端資料伺服器的通訊。如果需要用OpenGL繪製豐富多彩的立體圖,則要初始化GL環境。其他的工作就在於使用者如何控制程式的排程,使得各功能都能正常工作且與其他部分正常通訊。此外,後端伺服器程式也要增加對應於該控制元件的介面。

  這樣的一個程式編譯通過後,就成為一個可用於Web的控制元件,字尾名是OCX。按照前面敘述的方法將該OCX置入主頁,基本的工作就算完成。

  綜上所述,利用VC5.0開發ActiveX控制元件用於Web瀏覽,主要有以下幾個特點:

  1.採用Winsock的通訊機制,速度快、控制靈活、效率高;

  2.控制元件採用VC5.0編制,功能可擴充套件性很強;

  4.控制元件第一次下載雖然稍費時間,但下載後即在使用者機上註冊,以後可直接呼叫,速度效率均好;

  5.ActiveX技術是微軟發展的重中之重,且已成為當前軟體發展的潮流所向,發展空間廣闊;

  6.系統採用VC開發,可以利用已有的採用C語言編制的系統,開發工作量大大減