小弟目前遇到一个难题,用MFC调用ocx控件。用的是SDI,要求在view里响应oxc控件的事件,一直想不到解决方法,在对话框里响应ocx控件的事件是很简单,但是在view里怎么响应呢,各位老大来救火呀.
回答了问题,我再开个贴子送分

解决方案 »

  1.   

    记住控件本质上仍然是一个窗口,在vc中选择Project -> Add To Project -> Components and Controls... 菜单项后,vc会自动为你创建一个由CWnd继承而来的控件的包装类,可以象对待普通窗口一样为这个控件的包装类添加消息映射。
    此外,如果该控件支持IConnectionPoint,你也可以采用连接点的模式来响应更多的定制事件。
      

  2.   

    恕小弟愚笨,看了回答之后还是不知道怎么办。我再详细讲一下问题:
    我有一个OCX控件,名为MSR,这个控件会定期向调用他的应用发送一个event.当我把此控件添加到对话框上时,通过classwizard,可以添加对此事件的响应函数。OnDataEvent(....).但是我现在必须要在一个SDI工程里使用此控件,所以要请教怎样通过chen_wei_d(夜来香) 兄台所说的消息映射方法来响应此事件。
    小弟MFC学的不好,请不吝赐教,分数大大的有。
      

  3.   

    再加点说明:
    我在网上看到一篇资料,说是BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 可以响应activex控件向应用发送的消息,但是我在create了我的控件的实例后,从来就没有在这个函数中响应到任何事件。另外夜来香兄所说的通过消息映射来进行,但是目前的情况是我根本就不知道此控件发送的消息是什么(可能不是一个windows消息),因为从自动生成的该控件包装类中根本看不出来。
      

  4.   

    你所说的MSR控件会定期向调用他的应用发送一个event,是否是用连接点IConnectionPoint实现的?如果是,则你必需在你的客户应用程序中实现该控件定义的用于事件的接口。一般这种接口会是一个IDispatch接口。
    举例:如果你的MSR控件是通过继承自IDispatch的ISomeEvent接口发送事件,则你必需在你的应用程序中实现一个继承自ISomeEvent接口的CSomeEvent类,实现ISomeEvent的每一个方法(每一个方法对应于一个事件),即可响应控件的各种事件。
      

  5.   

    补充:
    实际上,你可以在一个对话框项目中用向导对该控件的事件进行响应,然后将向导产生的代码复制到你的CView中。这应该是最简单的方法。
      

  6.   

    在ATL下就知道如何来实现,MFC下想了想居然没想到!!同意楼上的方法,不过自己创建的肯定有些地方需要修改。
      

  7.   

    查了一下CWnd下有个GetControlUnknown()可以获取控件的指针,你用这个指针来挂接引出的events,事件的ID可以用OLE/VIEW来看。当然这个方法比较复杂,不过功能肯定是可以完成的了。