200分大赠送,关于响应activex事件的问题 小弟目前遇到一个难题,用MFC调用ocx控件。用的是SDI,要求在view里响应oxc控件的事件,一直想不到解决方法,在对话框里响应ocx控件的事件是很简单,但是在view里怎么响应呢,各位老大来救火呀.回答了问题,我再开个贴子送分 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 记住控件本质上仍然是一个窗口,在vc中选择Project -> Add To Project -> Components and Controls... 菜单项后,vc会自动为你创建一个由CWnd继承而来的控件的包装类,可以象对待普通窗口一样为这个控件的包装类添加消息映射。此外,如果该控件支持IConnectionPoint,你也可以采用连接点的模式来响应更多的定制事件。 恕小弟愚笨,看了回答之后还是不知道怎么办。我再详细讲一下问题:我有一个OCX控件,名为MSR,这个控件会定期向调用他的应用发送一个event.当我把此控件添加到对话框上时,通过classwizard,可以添加对此事件的响应函数。OnDataEvent(....).但是我现在必须要在一个SDI工程里使用此控件,所以要请教怎样通过chen_wei_d(夜来香) 兄台所说的消息映射方法来响应此事件。小弟MFC学的不好,请不吝赐教,分数大大的有。 再加点说明:我在网上看到一篇资料,说是BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 可以响应activex控件向应用发送的消息,但是我在create了我的控件的实例后,从来就没有在这个函数中响应到任何事件。另外夜来香兄所说的通过消息映射来进行,但是目前的情况是我根本就不知道此控件发送的消息是什么(可能不是一个windows消息),因为从自动生成的该控件包装类中根本看不出来。 你所说的MSR控件会定期向调用他的应用发送一个event,是否是用连接点IConnectionPoint实现的?如果是,则你必需在你的客户应用程序中实现该控件定义的用于事件的接口。一般这种接口会是一个IDispatch接口。举例:如果你的MSR控件是通过继承自IDispatch的ISomeEvent接口发送事件,则你必需在你的应用程序中实现一个继承自ISomeEvent接口的CSomeEvent类,实现ISomeEvent的每一个方法(每一个方法对应于一个事件),即可响应控件的各种事件。 补充:实际上,你可以在一个对话框项目中用向导对该控件的事件进行响应,然后将向导产生的代码复制到你的CView中。这应该是最简单的方法。 在ATL下就知道如何来实现,MFC下想了想居然没想到!!同意楼上的方法,不过自己创建的肯定有些地方需要修改。 查了一下CWnd下有个GetControlUnknown()可以获取控件的指针,你用这个指针来挂接引出的events,事件的ID可以用OLE/VIEW来看。当然这个方法比较复杂,不过功能肯定是可以完成的了。 VC中用CMarkup操作文件异常,不能保存 请问怎么创建系统级的模态对话框?? [交流]带新人日记 如何得到一台电脑区别于其他电脑的唯一标志? 求《vc++技术内幕 第四版》的电子版,潘爱民 翻译的 100分 (用163邮箱) 哪位能提供winsock2的能传东西的简单服务器/客户端源代码? 如何挂接自己的事件处理代码到ADO事件中? 用CreateThread和ExitThread有什么坏处? 求智能指针使用思路 怎样把几段AVI文件合成一段????(请高手指点) 这几本书大家觉得那本好呢? 迫切需要socket thread pooling的代码,在线急等!
此外,如果该控件支持IConnectionPoint,你也可以采用连接点的模式来响应更多的定制事件。
我有一个OCX控件,名为MSR,这个控件会定期向调用他的应用发送一个event.当我把此控件添加到对话框上时,通过classwizard,可以添加对此事件的响应函数。OnDataEvent(....).但是我现在必须要在一个SDI工程里使用此控件,所以要请教怎样通过chen_wei_d(夜来香) 兄台所说的消息映射方法来响应此事件。
小弟MFC学的不好,请不吝赐教,分数大大的有。
我在网上看到一篇资料,说是BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 可以响应activex控件向应用发送的消息,但是我在create了我的控件的实例后,从来就没有在这个函数中响应到任何事件。另外夜来香兄所说的通过消息映射来进行,但是目前的情况是我根本就不知道此控件发送的消息是什么(可能不是一个windows消息),因为从自动生成的该控件包装类中根本看不出来。
举例:如果你的MSR控件是通过继承自IDispatch的ISomeEvent接口发送事件,则你必需在你的应用程序中实现一个继承自ISomeEvent接口的CSomeEvent类,实现ISomeEvent的每一个方法(每一个方法对应于一个事件),即可响应控件的各种事件。
实际上,你可以在一个对话框项目中用向导对该控件的事件进行响应,然后将向导产生的代码复制到你的CView中。这应该是最简单的方法。