利用向导,建立ATL的ActiveX控件,利用ClassWizard生成OnCreate函数,
在构造函数里,m_bWindowOnly   =   TRUE; 
在OnCreate中操作一些成员变量,添加一个定时器。发现,这个控件在Activex控件测试容器中,可以很好运行;
在IE中也能很好运行;
我建立一个MFC的对话框程序,利用右键“插入Activex控件”,也能很好运行。可是,我利用代码,把这个Activex控件插入到richedit2.0中去的时候,这个控件能正确添加,可是不能动起来,发现定时器没有工作,我debug进去,看到OnCreate函数就没有执行过。这是为什么?注:我的这个Activex控件是ATL的,不是MFC的。richedit2.0也是好的,经过了其他的测试。
    把Activex控件插入到richedit中,我参考了这里的代码http://hi.baidu.com/favesoft/blog/item/844a9bd4a4dbcc01a08bb765.html谢谢!

解决方案 »

  1.   

    没用过richedit2.0
    为什么不用FinalConstruct
      

  2.   

    ouyh12345
    谢谢你。FinalConstruct中不能设置定时器啊,我在里面试过的。
      

  3.   

    你的控件还需要实现IOleObject接口才能在richedit中运作
    你应该通过CRichEditCtrl::GetIRichEditOle()或者发送EM_GETOLEINTERFACE消息来获得IRichEditOle接口指针,然后调用InsertObject方法插入你的控件。
      

  4.   

    jameshooo,
    谢谢你!我去尝试你的方法。
      

  5.   

    jameshooo,“你应该通过CRichEditCtrl::GetIRichEditOle()或者发送EM_GETOLEINTERFACE消息来获得IRichEditOle接口指针,然后调用InsertObject方法插入你的控件。”我在插入activex控件的时候,是用GetIRichEditOle,InsertObject。我参考的代码就是这样的。
    ////////////////////////////////////////////////////////////////////////////////////
    “你的控件还需要实现IOleObject接口才能在richedit中运作”我在MSND上看到,IOleObject接口就是IDataObject和IPersistStorage的一起应用。而我的activex控件是用vc2003向导做的,在做的时候,就已经支持了IDataObject和IPersistStorage。
    /////////////////////////////////////////////////////////////////////////////////////
    为什么activex控件的oncreate函数没有执行呢?
    你能不能留个email给我啊,我把代码工程发给你,呵呵。
      

  6.   

    构造函数里:m_bWindowOnly = TRUE; 
      

  7.   

    我在网上找到一个方法,解决了这个问题,与大家分享!结帖。
    http://blog.csdn.net/gxulg/archive/2005/03/04/311057.aspx