三、给控件添加属性: 切换到类视图,工程名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="调用控件方法" οnclick="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)));