步步學ACTIVEX網頁控件開發C++(4)

ActiveX控件的屬性,方法和事件

  ActiveX控件和Web頁面之間的通信是通過ActiveX控件的屬性,方法和事件來完成的。爲了演示這些內容,我們需要創建一個帶有輸入框的頁面。當頁面上的“提交”按鈕被點擊後,輸入的文本將通過一個輸入參數自定義屬性傳遞給ActiveX控件。然後,控件的一個函數將被調用,複製這些文本到一個輸出參數自定義屬性。接着,將觸發一個事件,將這些文本顯示到頁面上。我們將通過下面這些步驟來實現這一ActiveX控件和Web頁面之間的通信過程:

  1.首先,我們將爲ActiveX控件創建自定義屬性,用於發送和接收文本。在類視圖中,展開MyActiveXLib,然後選擇_DMyActiveX。右鍵單擊_DMyActiveX,在上下文菜單中選擇“Add”->“Add Property”。在”添加屬性向導”對話框中,選擇BSTR作爲屬性類型,然後輸入“InputParameter”作爲屬性的名稱。至於對話框中的其它內容,嚮導將自動爲我們生成。最後,點擊“Finish”按鈕關閉對話框,嚮導將爲我們創建相應的代碼。同樣地,添加另外一個BSTR類型的屬性OutputParameter。

 


圖9 添加屬性向導

  2.接下來,我們將創建一個方法,使Web頁面能夠通知控件將文本從輸入參數傳遞到輸出參數。在類視圖中,展開MyActiveXLib,然後選擇_DMyActiveX。右鍵單擊_DMyActiveX,在上下文菜單中選擇“Add”->“ Add Method”。在“添加方法嚮導”對話框中,選擇void作爲方法的返回類型,輸入“LoadParameter”作爲方法名,嚮導會自動地填入“LoadParameter”作爲外部名字。點擊“Finish”按鈕關閉對話框,嚮導將爲我們創建相應的方法代碼。  

 


圖10添加方法嚮導

  3.現在,我們將創建一個事件,讓ActiveX控件通知Web頁面已經完成了文本從輸入參數到輸出參數的傳送。Web頁面中的代碼將對這個事件做出響應,將輸出參數中的文本顯示出來以證明傳送確實發生了。在類視圖中,右鍵點擊CMyActiveXCtrl,然後選擇“Add”->“Add Event”。在“添加事件嚮導”對話框中,輸入“ParameterLoaded”作爲事件名稱,然後將外部名稱修改爲“FireParameterLoaded”。點擊“Finish”按鈕關閉對話框,嚮導將爲我們創建相應的代碼。

 


圖11 添加事件嚮導

  通過上面這些步驟,嚮導已經爲我們創建了代碼的大致框架。我們只需要添加幾行代碼,完成文本的複製然後通過事件通知Web頁面就可以了。編輯文件MyActiveXCtrl.cpp,在函數LoadParameter中添加如下的代碼:

// 將文本從輸入參數複製到輸出參數
m_OutputParameter = m_InputParameter;
// 觸發一個事件通知Web頁面
FireParameterLoaded();
  爲了測試ActiveX控件和Web頁面之間的通信,使用ActiveX Control Pad創建如下的HTML代碼:
<HTML>
<HEAD>
<TITLE>MyActiveX - Methods, Properties, and Events</TITLE> 
<SCRIPT LANGUAGE="JavaScript">

function PassParameter()
{
    
if (StringInput.value != " ")
    {
        MyActiveX1.InputParameter
 = StringInput.value;
        MyActiveX1.LoadParameter();
    }
}
</SCRIPT>
</HEAD>
<BODY>
<center>
MyActiveX - Methods, Properties, and Events Example
<p></p> 
<OBJECT ID="MyActiveX1" WIDTH=350 HEIGHT=50
CLASSID="CLSID:36299202-09EF-4ABF-ADB9-47C599DBE778">
    
<PARAM NAME="_Version" VALUE="65536">
    
<PARAM NAME="_ExtentX" VALUE="2646">
    
<PARAM NAME="_ExtentY" VALUE="1323">
    
<PARAM NAME="_StockProps" VALUE="0">
</OBJECT>
<p></p> 
Input Parameter:
 <INPUT TYPE ="text" NAME="StringInput" VALUE=" ">
<p></p>
<INPUT TYPE="button" NAME="Submit" 
       VALUE
="Submit" ONCLICK=PassParameter()>

<SCRIPT FOR=MyActiveX1 EVENT=ParameterLoaded()>
<!-- {
   window.document.write(
"The parameter you entered is:<br> " + MyActiveX1.OutputParameter + "  ")
-->
</SCRIPT>
</center>
</BODY>

  將上面的頁面保存到Web服務器上,然後在IE中打開這個頁面。你將看到一個用於輸入文本的編輯框和“提交”按鈕。在編輯框中輸入文本,然後點擊“提交”按鈕,你將得到一個新的頁面,其中顯示了你剛剛輸入的文本內容。下面,我們來解釋一下整個Web頁面的工作過程。

  當你點擊“提交”按鈕之後,JavaScript函數PassParameter將被調用。這個函數將文本從編輯框StringInput複製到ActiveX控件的InputParameter屬性。然後,它將調用控件的函數LoadParameter,將文本從InputParameter複製到OutputParameter,接着調用FireParameterLoaded產生一個ActiveX控件事件。下面的HTML代碼將負責對這個事件進行處理,通過ActiveX控件的OutputParameter屬性訪問文本內容,將輸入的文本顯示到新窗口中。如此,就完成了ActiveX控件和Web頁面之間的通信。

<SCRIPT FOR=MyActiveX1 EVENT=ParameterLoaded()>
<!-- {
  window.document.write("The parameter you entered is:<br
> " +                        MyActiveX1.OutputParameter + "  ")
-->
</SCRIPT>

 

 

原文:http://blog.sina.com.cn/s/blog_561a69f10100gas8.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章