ActiveX控件使用事项

一、由于win7权限问题, 编译activex控件时会报权限问题的错,所以要使用右键 以管理员权限打开Visual Studio 2010
二、需要对activex进行测试,而2010中无ActiveX control test container 所以要编译这个工具,参考 http://blog.csdn.net/waxgourd0/article/details/7374669
还需要在Property——configuration properties——Debugging—— Command中添加命令:$(VSInstallDir)Samples\1033\VC2010Samples\C++\MFC\ole\TstCon\Debug\TstCon.exe


三、给控件添加属性:   切换到类视图,工程名Lib下的接口右键--添加---添加属性

    

 

四、添加自定义属性,有两点要注意

    

    

    (1)注意:自定义的属性,要保持持久性,也就是用户对控件进行设置后,关闭工程,然后再打开,设置的值还在

    

    (2)注意: 自定义的属性, 随着属性页中的值的修改,容器中的属性也要随之修改

    从下面的代码中可以看出InterVal的调度为1

        

    OnInterValChanged中当InterVal变化时, 调用BoundPropertyChanged方法通知容器InterVal的变化

        


五、添加属性页

    


六、属性页中的属性关联控件

    

    

    

    这样关联的只是关联了内部变量,下图中的上面一句,  但还要关联外部变量,在VS2010中要手动添加(下面那句)

    


七、添加方法

     添加容器能调用的方法

    

    

    然后在这儿自动添加一个方法:

    

    而,在CClockOCXCtrl中添加了一个此方法的实现, 在实现这个方法的函数体中可以添加自己的内容:

    


八、添加事件

    如添加Click事件

        


九、添加通知事件

在此例子中, 当秒针到达0时,通知容器, 让容器能接受通知 (1)  在控件中添加一个事件NewMinute: 在CClockOCXCtrl中自动添加了一个NewMinute的方法 (2)当秒针到达0时调用NewMinute的通知容器:              (3)容器接收到控件发来的事件,然后进行回应。  容器中自定义事件和使用容器自带的Click事件一样使用
十、通过HTML调用OCX
       首先注册OCX,如果源代码在本机通过VS编译过则无需注册,复下面的命令到记事本,重命名为.bat结尾的文件,然后使用管理员权限运行
  cd %~dp0             regsvr32 ClockOCX.ocx

然而在打开测试网页是通常会出现“允许阻止的内容”这个提示,要去除需要做如下设置:
IE高级选项:允许活动内容在“我的电脑”的文件中运行 选中
            
    
或者使用脚本设置,复制如下命令到记事本,重命名为以 .reg 结尾的文件,双击运行
Windows Registry Editor Version 5.00   
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_LOCALMACHINE_LOCKDOWN]
"iexplore.exe"=dword:00000000

         例子:

            


New Page




        

    

调试: 1. 设置IE注册表
regedit→ HKEY_LOCAL_MACHINE →SOFTWARE→Microsoft →   Internet Explorer→Main。
在Main里新建一个项  类型为DWORD   名为TabProcGrowth    值为0。



2. VS设置 Property -> Configuration Propertis -> Debugging Command项设置IE路径:  C:\Program Files\Internet Explorer\iexplore.exe Command Argument项设置HTML路径: 如 C:\Users\xiongjie\Desktop\Test.html



十一、MFC中添加OCX控件:

    1Toolbox右键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窗口句柄
在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)));







本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部