小弟以前没做过ActiveX控件,现在有个项目很急,突然让我去做这样一个ActiveX插件:在别人已有ocx(假设为a.ocx)的基础上调用该控件(即为名为a.ocx的控件)。就是类似ActiveX内嵌ActiveX,小弟用的是MFC,怎么做呢?
试过一些方法最后不行,会不会是根本就不能内嵌呢?
已经纠结几天了,还是上来问问大牛们。拜托了。

解决方案 »

  1.   

    在你的控件上,右键,添加AcxtiveX控件就行了
      

  2.   


    如果只是类似对话框使用这个控件的话,在对话框上右键添加ActiveX控件,就像添加一个按钮一样简单。可问题是用MFC向导建立的工程,没有可视化的控件,怎么右键添加呢?我试过用类向导添加这个控件的类,再声明对象,但是没有一个实体的IDD_XXX给它,运行到InvokeHelper就出错。
    我也试过创建一个对话框,将我们自己的控件指向这个对话框,再将已有的a.ocx添加进入这个对话框,就像添加一个按钮一样,但是也出错,和前面的那个一样。
      

  3.   


    创建工程就是按照向导创建的。对话框m_topWnd就是这个窗口类声明的变量。int Ca_TabletCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (COleControl::OnCreate(lpCreateStruct) == -1)
    return -1; // TODO:  在此添加您专用的创建代码
            if (!m_topWnd.Create(IDD_DIALOG1,this))
    {
    return -1;
    }
    return 0;
    }
      

  4.   

    是否是需要在程序初始化的时候用
    ::CoInitialize(0);
    AfxEnableControlContainer();
    做一下初始化。
      

  5.   

    参考一下:
    http://blog.sina.com.cn/s/blog_467338ba01000028.html
      

  6.   


    谢谢你的回答。但是我这边不是不能注册的问题,程序使用自己制作的控件也没问题,就是在ActiveX内嵌ActiveX时出错。
      

  7.   

    出错在哪里,debug调试下不就知道了。
      

  8.   


    谢谢你的方法,这个方法我试过了,在没有加入我的另一个ActiveX控件的时候是正常的,但是当我加入另一个ActiveX控件时,对话框构造过程中,运行到构造该控件,就不行了。
    是不是我哪些注意事项没做好?求教。