1、activex是使用mfc开发的,不是用的atl,对atl不熟.
2、activex是动态生成的,且通过excel的插件使用.
3、现在我通过excel的插件,插入了一个activex控件,现在我在activex控件上面点击鼠标,如OnLButtonUp,当我在控件上面点击鼠标左键后,我怎么让excel的插件知道我此时的操作与点击时鼠标的位置呢??activex控件与对话框类型的通讯我知道,不管是静态生成的,还是动态生成的。但目前是与一个插件通信。不知道前面的通信机制是否还适用于插件中.

解决方案 »

  1.   

    我怎么让excel的插件知道我此时的操作与点击时鼠标的位置呢
    --
    可以让控件导出鼠标事件不知道前面的通信机制是否还适用于插件中
    --
    activex控件的通信机制和平常的应用程序的通信机制没什么区别
      

  2.   

    回调函数吧,你的excel的插件提供一个OnMouseClick(POINT pt).在你点击activex控件的时候调用一下。
      

  3.   

    to ouyh12345:
      "可以让控件导出鼠标事件 "
      我在_IXXXEvents中通过add events菜单项,已经添加了一个MouseUp事件,odl文件中对应的语句如下:
    [id(DISPID_MOUSEUP)] void MouseUp(short Button, short Shift, OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y);
    这是导出了鼠标事件吗?在对话框中可以让窗口响应此事件了,但是我是插件,具体在代码上面该如何实现,才能让插使用上这个事件呢?按我的理解,因为不能在插件中对此事件进行硬编码,所以必须自定义一个函数来取代此事件啊。这个在插件中如何实现呢?  
    to wshcdr,wanyongsharp:
      你们说的方法,可是我在插件项目中并没有发现相关的add windows message handler相关的菜单项啊。如果是我自己定义,可以用吗?“在你点击activex控件的时候调用一下”,这个调用如何调用呢???是让activex控件自已响应后调用吗?如果是这样,还需要知道我插件的接口啊;
      

  4.   

    留下QQ:6286357,注明下ATL,还是QQ上问得清。谢谢
      

  5.   

    to wshcdr:
      你说的该如何调用插件导出给控件的函数呢?在C++里面如何将一个函数指数另一个函数。类似于回调函数那样,刚刚转C++不久。不好意思啊。请大家再说得具休点。
      还有一点。我的这个控件并不是简单的放在窗口上的。我这个控件是一个单独的OCX,则EXCEL插入到工作表中。我是要实现这种情况下面的通信。
      

  6.   

    LZ是做EXCEL的插件?还是什么别的?
    如果是EXCEL的插件的话,插件是有机会让EXCEL的表格知道是发生了什么事件的
      

  7.   

    我是用ATL实现了EXCEL的一个插件,然后在EXCEL中插入一个MFC实现的ACTIVEX控件,现在就是想让这个插件知道在控件上面的鼠标事件,比如我在ACTIVEX控件上鼠标左键按下,然后移动鼠标,再松开鼠标左键,这时,在鼠标松开的时候,我要让插件知道鼠标松开左键了,并且知道鼠标移动的偏移值,才能通过EXCEL中的插件来移动该ACTIVEX控件。
    也就是,当activex控件中有了OnLButtonUp消息后,插件能捕获此消息并进行处理。因为是用MFC生成的activex控件,并不是用ATL生成的。所以我也不知道ATL那样的事件连接点原理在此MFC中如何使用。而客户端使用activex控件并不是最简单的那种:在对话框中放入一个控件,再实现该控件的消息响应。急啊。在线等,还有几个帖也是此类型的问题。哪位兄弟能帮我解决,一起给分啊。
      

  8.   

    由于我没做过插件类型的项目,所以,并不能确切了解LZ的问题
    但是,我也提供一个办法,LZ可以试试定义一个头文件,作为你用ATL实现的插件和MFC实现的ActiveX控件之间的约定
    定义一个类如下
    class CMouseEven
    {
        public:
            virtual void ButtonUp(int) = 0;
    }
    在你的插件里实现ButtonUp,然后想办法传递给你的 MFC实现的ActiveX控件(比如可以通过动态创建这个Active的方式,如果是这个方式,控件需要到出一个用于创建的全局函数)这样的机制建立起来后,MFC实现的ActiveX控件发生事件(比如鼠标抬起)的时候,你可以调用CMouseEven中对应的方法ButtonUp流程如上
      

  9.   

    很感谢wshcdr兄的热心,谢谢啦。我先结帖吧.加我MSN,有空聊聊啊。MSN:[email protected]