• 20110413 15:54 利用事件触发实现ActiveX调用js函数


    之前写过文章通过自定义函数来实现ActiveX回调JS中的函数,最近在网上发现一更简洁的方法,通过事件触发,在这里小结一下,为使内容连贯,请参考我之前的《一步一步实现ATL开发的ActiveX组件与javascript的交互》系列文章http://hi.baidu.com/hwygy_001/blog/item/21ec5bc5294f64bd8326ac72.html

    1.  如果使用的是VS2010,则在Class View窗口中右击_ICalcEvents接口,依次选择“Add”、“Add Method…”,根据添加方法向导添加AddCompleted方法,如下图所示:

    若采用的VS2008,则没有自动的事件方法,需要手工注册,找到项目的.idl文件,在其中的library CalculatorLib中添加如下代码:

    dispinterface_ICalcEvents

            {

                    properties:

                    methods:

                        [id(1)]voidAddCompleted([in]DOUBLE * bstrCmdInfo);

            };

    完成手工注册。

    2.  然后在Class View窗口中右击CCalc类,依次选择“Add”、“Add Connection Point…”,在弹出的实现连接点窗口中实现_ICalcEvents接口。

    3.  完成向导后,VS会自动为我们生成基本框架,包括引发事件的方法Fire_AddCompleted。我们只需在Add方法中添加_ICalcEvents_CP.h(生成的Fire_AddCompleted方法所在文件)头文件,运算并在运算结束时调用Fire_AddCompleted的代码:


    STDMETHODIMP CCalc::Add(DOUBLE a, DOUBLE b,DOUBLE * result) 

    { double result; 

    *result = a + b; 

     Fire_AddCompleted(result); 

    return S_OK; 

    }

    4.在网页中添加代码进行测试(添加的javascript代码如下),应该能够得到我们想要的效果。

    <script type="text/javascript">    

    function add() {        

    var calc = document.getElementById('Calc');   

        calc.attachEvent("AddCompleted", OnAddCompleted);        

        calc.Add(3, 4);    

    }     

    function OnAddCompleted(result) {      

      alert(result);    

    }

    </script>

    参考文章:http://www.cnblogs.com/chinadhf/archive/2010/09/03/1817336.html

    from:http://hi.baidu.com/hwygy_001/item/fd04a23a2649be0acfb9fe23

  • 相关阅读:
    module模块和包(十七)
    swap(十六)
    文件系统
    Confluence 6 管理协同编辑
    Confluence 6 管理协同编辑
    Confluence 6 数据收集隐私策略
    Confluence 6 修改警告的阈值和表现
    Confluence 6 警告的类型
    Confluence 6 诊断
    Confluence 6 垃圾收集性能问题
  • 原文地址:https://www.cnblogs.com/lidabo/p/2751549.html
Copyright © 2020-2023  润新知