一、OCX控制項開發
1、使用IDE版本: VS2010
2、.基於MFC技術 開發OCX控制項。
3、.基本OCX開發過程
3.1、開啟VS 2010 建立項目,選擇MFC模板,“MFC ActiveX控制項” “ Visual C++ 項目”,輸入名字後,一路預設就可以了。
3.2、下面對怎樣加入ocx事件與方法說明一下,選擇“類似圖” ,如圖紅框所示:
選擇某個紅框的內容右擊,選擇添加方法。 這時出現旁邊這個對話,提示輸入方法名稱。
註:第一個紅框是方法 作用:是外面可以調用的方法。
第二個紅框是事件 作用:OCX控制項將資訊發送到外面。
4.ocx控制項引入對話方塊
4.1 在資源檢視上 添加一個對話方塊的資源或者直接選擇”插入Dialog“項。 然後在對話方塊上右擊選擇”添加類“項,輸入你要的類名。
4.2、然後選擇屬性,將visible值 設定成true、將Border 值設定成 None、將Style 值設定成 Child、將System Modal 值設定成True。
4.3、然後再選擇類別檢視,在有個類名”Ctrl“字樣的類上右擊選擇添加變數,該變數的類型是剛剛加入的類。
4.4、還是在類似圖介面,選擇同上的類,右擊開啟類嚮導,選擇訊息視窗,添加WM_CREAT訊息事件,如圖所示:
添加好後,在該函數中加入如下代碼:
m_dlgTest.Create(IDD_DIALOG1,this);
將該變數m_dlgTest換成 你剛剛命名的對話方塊類變數,就可以。
4.5、修改4.4中”Ctrl“檔案中OnDraw函數,將原來畫橢圓的代碼刪除,加上如下代碼:
//pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));//pdc->Ellipse(rcBounds);m_dlgTest.MoveWindow(rcBounds, TRUE);CBrush brBackGnd(TranslateColor(AmbientBackColor()));pdc->FillRect(rcBounds, &brBackGnd);
上面注釋的 是要刪除的。添加註釋下面的代碼。同上處理,將變數更換你的類變數。
5、ocx中再引入OCX控制項。
5.1 、在你要加入OCX控制項的資源上右擊 選擇”插入 ActiveX 控制項“項,然後選擇你所要加入的OCX控制項。
5.2、如果不讓這個ocx顯示,請選擇屬性將visible值 設定成false。預設是true。
5.3、在資源的ocx控制項上右擊選擇添加變數,輸入變數名。
5.4、然後在解決方案資源管理介面上選擇有”APP“字樣類的檔案,在其InitInstance()函數中的if(bInit)處理裡加入如下代碼:
if (bInit){// TODO: 在此添加您自己的模組初始化代碼。AfxEnableControlContainer();SetDialogBkColor(RGB(255,255,255));}
二、Web Javascript使用OCX控制項
1、首先建立一個html檔案,中間要<object></object>標籤。如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>OCX測試</title></head><body><object ID="myocx" classid="clsid:AA77E166-CE88-4C96-959D-609EF141539A" WIDTH=200 HEIGHT=200></object>
</body></html>
註:<object>標籤中 classid的來源是ocx。 可以在源ocx工程中有個副檔名叫”.idl“文中找到這個classID,(一般是最後一個)
2、Javascript使用ocx的方法。var myocxTest = document.getElementById("myocx"); myocxTest 就可以使用OCX控制項的方法了。
3、Javascript使用OCX事件,即OCX返回資訊到網頁上。方法:
<script event="ocx控制項的事件" for="myocx"> 你處理資訊的代碼</script>
4、在第3條基礎上,即ocx返回資訊到介面上,在這個處理中還需使用該ocx的方法。如果在上述3的代碼中直接加上ocx的事件,會將瀏覽器卡死,無法正常使用。但是如果將ocx的事件用定時器延時一段時間後就可以正常。原因:可能是因為ocx將資訊返出來後還來不及銷毀,網頁又開始使用ocx的方法。所以使網頁線程堵塞造成卡死現象。【這是我看到現象後總結的,不一定是真理,如果有博友知道其原理請告知,分享你的技術,服務萬千前端開發人員】
<script event="ocx控制項的事件" for="myocx"> <pre name="code" class="javascript"><span style="white-space:pre"></span>setTimeout(function(){
<span style="white-space:pre"></span>myocx.getName();},1500);
</script>