lz的意思是java中响应atl控件的事件?
解决方案 »
- 网络中传来BITMAP这个类型的图像数据,我怎么将他显示在对话框上?
- 我能不能成为大哥?
- 如何显示自定义IE工具栏
- 小鸟求教...关于学习界面编程
- MFC 绘汉字,PreTranslateMessage 无法获取汉字输入法?
- 请问有没有这样一个标准对话框可以调用
- 请问各位大虾:在一个对话框中,一些外围的东西是固定不变的,现在我在对话框中要显示的东西一个对话框显示不完,需要定义为在下一个同样
- ××××××××老板要我做一个控件,有一个static和一个edit框 程序急着要,可是小弟从来没做过啊,怎么办~~~×××××××
- 怎样在对话框程序中加菜单?(再线等待,马上给分!)
- 请教高手如何判断win2000服务器是Server和Profession 版本
- List Control 读写txt文件的方法
- 一个虚函数面试题
回调属性的大概原理是这样的,在控件接口中增加一个叫做something_occ的可读性属性,属性类型是IDispatch*,这样JS可以直接通过设置属性的方式设置好回调(注意JS中的函数全部都是IDispatch*),例如 xxx.something_occ = function() { },或者通过HTML中的<PARAM>标签来设置(不同的实现方式,但本质相同)。当控件需要触发某事件时,如果发现something_occ属性已经被设置了回调,则可以直接调用这个回调,调用过程也很简单,abc->Invoke(0, ...) 即可,注意DISPID的值是0,这就是在调用JS设置的回调函数。
响应事件 我已经实现了 ,响应事件(连接点)的代码如下:
<object id="AtlCom" width="200" height="200" classid="clsid:FE5EB769-009B-4718-A703-106DB3EA0EF4" >
</object>
<script language="JavaScript1.2" for="AtlCom" event="SomeEvent(strMsg)">
alert(strMsg);
</script> 由于前端的开发 用jquery比较多,动态创建 控件,所以 这种方式不好用,我采用回调方式实现了
我的意思是 怎么通过 atl 属性回调 js, 特殊需要:)
谢谢你,这种方式我已经实现了,和你说的一样。
我通过 自己控件的 一个 attachEvent方法传入的回调函数,如下:
calc.attachEvent("onMsg",function innerFun(result){OnMSG(result);});但是 在PARAM 标签下设置 不成功,不知道是什么原因,通过调试,我发现 <param>标签设置 long ,bstr 等类型的 属性都没问题,就是 设置 IDispatch*属性不行,不知道是什么原因
另外,PARAM标签提供初始化的属性数据只能是数字或者是字符串(本质都是字符串),就像value="someEvent"一样,这里仅提供回调函数的名称字符串,怎么处理这个字符串,那是控件自己的事,如果控件希望这是一个回调函数,那么控件就应该根据名称向脚本引擎查询根命名空间下的全局函数,查到了就把它当做回调函数保留起来作为内部属性的值,这跟 xxx.callback = function(){} 是完全一致的效果。说得太多了,楼主再不给我培训费,我就闭嘴了
<PARAM NAME="something_occ" VALUE="SomeEvent"></PARAM> 传入 ,只不过我接收成为 字符串。然后 在组件中 通过 IOleClientSite 找到 IOleContainer 然后 。。 如果在 控件创建在IE 中 那么可以找到 IHTMLDocument2 ,然后就可以根据传入的字符串 GetIDsOfNames,然后就可以invoke 了 。不知道这样行不行。还有 如果这样实现了 ,那么如果这个控件 生存在 普通的exe 程序中 ,那么我的EXE程序需要怎么办呢