三、給控件添加屬性: 切換到類視圖,工程名Lib下的接口右鍵--添加---添加屬性
四、添加自定義屬性,有兩點要注意
(1)注意:自定義的屬性,要保持持久性,也就是用戶對控件進行設置後,關閉工程,然後再打開,設置的值還在
(2)注意: 自定義的屬性, 隨着屬性頁中的值的修改,容器中的屬性也要隨之修改
從下面的代碼中可以看出InterVal的調度爲1
在OnInterValChanged中當InterVal變化時, 調用BoundPropertyChanged方法通知容器InterVal的變化
五、添加屬性頁
六、屬性頁中的屬性關聯控件
這樣關聯的只是關聯了內部變量,下圖中的上面一句, 但還要關聯外部變量,在VS2010中要手動添加(下面那句)
七、添加方法
添加容器能調用的方法
然後在這兒自動添加一個方法:
而,在CClockOCXCtrl中添加了一個此方法的實現, 在實現這個方法的函數體中可以添加自己的內容:
八、添加事件
如添加Click事件:
九、添加通知事件
regsvr32 ClockOCX.ocxcd %~dp0
IE高級選項:允許活動內容在“我的電腦”的文件中運行 選中
或者使用腳本設置,複製如下命令到記事本,重命名爲以 .reg 結尾的文件,雙擊運行
Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_LOCALMACHINE_LOCKDOWN]"iexplore.exe"=dword:00000000
例子:
<HTML>
<HEAD>
<TITLE>New Page</TITLE>
</HEAD>
<BODY>
<div id="divOcxContainer"></div>
<OBJECT ID="ClockOCX" WIDTH=100 HEIGHT=51 CLASSID="CLSID:6E38E119-4EB0-4DD6-8CFB-AE5348E93AF6" codebase="ClockOCX.ocx">
</OBJECT>
<input type="button" id="btn" name="btn" value="調用控件方法" onclick="CallOCX()"></input>
</BODY>
</HTML>
<!--響應控件中的事件-->
<script language="javascript" for="ClockOCX" event="NewMinute">
alert("New Minute");
</script>
<!--調用控件中的方法-->
<script language="javascript" type="text/javascript">
function CallOCX()
{
var str;
str = ClockOCX.FuncReturnStr();
alert(str);
}
</script>
調試:1. 設置IE註冊表
regedit→ HKEY_LOCAL_MACHINE →SOFTWARE→Microsoft → Internet Explorer→Main。
在Main裏新建一個項 類型爲DWORD 名爲TabProcGrowth 值爲0。
十一、MFC中添加OCX控件:
(1)Toolbox右鍵choose items,在COM components中選中相應的OCX控件,於是在Toolbox會添加一個OCX控件;
(2)與添加Button等其他控件一樣在Dialog中添加OCX控件。
十二、修改classid
如要設置爲: CDAFE10C-0D0B-4BE2-B90A-2C79E86F2DAA
則需在 ***Ctrl.cpp 中修改如下地方:
IMPLEMENT_OLECREATE_EX(COCTITMCtrl, "OCTITM.OCTITMCtrl.1",
0xCDAFE10C, 0x0D0B, 0x4BE2, 0xB9, 0x0A, 0x2C, 0x79, 0xE8, 0x6F, 0x2D, 0xAA)
各個顏色部分對應填寫即可;
同時在 ****.idl 中的最下面一個uuid中設置:
uuid(CDAFE10C-0D0B-4BE2-B90A-2C79E86F2DAA)
以修改方法爲例需修改這四個地方:
文件名 修改內容...Ctrl.h SHORT cardInsert(LONG iTimeout); ...Ctrl.cpp SHORT COCTITMCtrl::cardInsert(LONG iTimeout) { ..... } ...Ctrl DISP_FUNCTION_ID(COCTITMCtrl, "cardInsert", dispidcardInsert, cardInsert, VT_I2, VTS_I4) ....idl [id(13), helpstring("方法cardInsert")] SHORT cardInsert(LONG iTimeout);
在OCX中通過GetSafeHwnd()無法獲取其句柄,需在OnSetClientSite() 函數中添加以下代碼才能獲取其句柄if (m_pClientSite) // It doesn't matter who the parent window is or what the size of // the window is because the control's window will be reparented // and resized correctly later when it's in-place activated. VERIFY (CreateControlWindow (::GetDesktopWindow(), CRect(0,0,0,0),CRect(0,0,0,0)));