用Hook不知道行不行。试试看吧。

解决方案 »

  1.   

    我这里可以啊!
    我的COM是ATL做的一个Full Control,弹出一个模态对话框,上面用了一个WebBrowser控件,我重载了CWebBrowser2的OnMouseMove,没问题的。
      

  2.   

    to:sxbyl
      谢谢,我试试。
      

  3.   

    谢谢两位。
       不过觉得用Hook并不合理,应该有解决的办法。
       另外控件是用#import 引入的,在COM里面用控件的事件需要其它办法,并不是很简单了。
      

  4.   

    哦……你的控件是#import引入的,这个可能不一样,有时间我再去试试,现在反正是没时间了
      

  5.   

    是不是消息处理函数在消息映射表里放错了位置?又#import引入控件后你是如何创建这个控件的啊?
      

  6.   

    Use ATL
    1。首先实现事件接口。
    class CYourCtrlEventImp:
    public CComObjectRoot,
    public IYourCtrlEvent
    {
    //响应事件函数
    ...
    {2。CComObject<CYourCtrlEventImp> *ptrEvent = new CComObject<CYourCtrlEventImp>;
    CComPtr<IUnknown> ptrEvent;
    DWORD dwCookie;
    hr = AtlAdvise(ptrYourCtrl, ptrEvent, DIID_IYourCtrlEvent, &dwCookie);
      

  7.   

    See msdn article
    SAMPLE: AtlSink Uses ATL to Create a Dispinterface Sink
      

  8.   

    谢谢bfsn!终于有人给出了正确答案。
    我已经实现了过了,正准备删除贴子的时候见到了大侠,
    能能再帮我一下,看看这个问题:
    1、(插入ATL对象的时候有一个对话框类)我在上面加入了一个LIST控件,我打算用一个成员变量控制它,可是如果用类向导的话就会生成一个从CDialog继承下来的新类,使用了和一开始创建的对话框同样的资源ID,成员变量就加在了新类里面,这样一来我该如何控制这个LIST?
    2、如何在COM里面创建一个无模式对话框,如果MFC没有的话?
      

  9.   

    各位大哥,介绍几本com的入门书吧
    谢过
      

  10.   

    to w12:
       1.使用Api or 宏。 See Msdn article "List View Control Macros"
       2.::CreateDialog or CDialogImpl::Create
      

  11.   

    谢谢bgsn的回答,我本打算用SendMessage来处理,现在知道了更好的方法!
    现在我只是对为什么会产生一个从继承的新类迷惑不解,不知道这样一来会有什么用处?
    能给我解释吗,分全是你的,不管对与否!
      

  12.   

    VC class Wizard 还不支持ATL的对话框类,而仅仅支持MFC。
      

  13.   

    所以,ATL对话框中的控件与属性映射无法实现。
    假如你不惜牺牲ATL代码小的优点,你可以使用MFC的CDialog;否则,就必须使用API或者ATL的CDialogImpl.
      

  14.   

    谢谢,我明白了,看来很多东西应该使用Api 来完成。
      

  15.   

    如果你用mfc,你可以用class wizard映射事件,如果用atl,对不起,自己写代码映射
      

  16.   

    我并没打算用MFC。MFC对COM的支持不多,写出的组件也臃肿。