比如我有一个ActiveX控件A,有界面.我自己想写一个控件,要求自己的控件界面是A的界面,而且也能调用A的接口.如何实现?
第一次写ActiveX...

解决方案 »

  1.   

    先注册你的A控件,然后再新建控件项目.
    然后在你的新项目里调节控件A啊.
    具体的可以使用:
    HRESULT CreateControl( DWORD dwResID, IStream* pStream = NULL, IUnknown** ppUnkContainer = NULL );
    这个函数创建啊,具体的研究一下MSDN吧,里面都写得很清楚.
      

  2.   

    这里有谈论http://topic.csdn.net/t/20031107/23/2439358.html
      

  3.   

    我想在OnDraw的地方显示我要调用的控件的界面,谁有相应的代码阿?谢谢了
      

  4.   

    我想在OnDraw的地方显示原来控件的界面,如何实现?谁能贴上相应的代码阿?
      

  5.   

    在非对话框容器中使用ActiveX控件
    在使用一个已注册的ActiveX控件之前,必须先用组件廊将该控件添加到应用程序
    中,步骤如下:
    1.从Project菜单选择Add To Project下的Components and Controls。
    2.在弹出的对话框中双击Registered ActiveX Control子目录,打开此目录。
    3.选择你需要的控件,点击Insert按钮,弹出Confirm Classes对话框。
    4.在列出的类名中选择需要的类(缺省为全选中,最好接受缺省设置),点击OK
    ,关闭Confirm Classes对话框。
    5.点击Close关闭组件廊,该控件的图标即加入到对话框编辑器的控件面板上。
    这样,我们就可以在对话框中像使用Windows标准控件那样使用该控件了。但在某
    些应用中,你可能需要在非对话框容器(如应用程序的窗口)中嵌入ActiveX控件
    。这时没有对话框编辑器,我们应怎样在非对话框容器中使用ActiveX控件呢?
        当组件廊将ActiveX控件添加到你的应用程序后,组件廊会创建一些包裹类(
    即在Confirm Classes对话框中列出的那些类)。其中有一个类的基类是CWnd,该
    类是控件的包裹类,它被用作控件与控件包容器之间的接口,有两个公有的Create
    成员函数:
    virtual BOOL Create(LPCTSTR lpszClassName,
                  LPCTSTR lpszWindowName, DWORD dwStyle,
                  const RECT& rect,       CWnd* pParentWnd, UINT nID,
                  CCreateContext* pContext = NULL)
    和BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,
                  const RECT& rect, CWnd* pParentWnd, UINT nID,
                  CFile* pPersist = NULL, BOOL bStorage = FALSE,
                  BSTR bstrLicKey = NULL)
    我们就可以使用该控件的包裹类的Create函数在非对话框容器中动态地创建此控件
    的实例。
    步骤如下:(本例中欲加入的控件名为MSFlexGrid ,CMSFlexGrid是控件的包裹类
    ,msflexgrid.h是包裹类的头文件)
    1.         在视类头文件(本例中为TestView.h)中的类定义前加上
    #include “msflexgrid.h”
    2.         在TestView.h中CTestView类定义的protected部分加上控件包裹类类
    型的成员变量声明:
        class CTestView : public CView
       {
         ...
         protected:
            CMSFlexGrid  m_fgrid;
         ...
       };
    3.         用ClassWizard为类CTestView 添加消息WM_CREATE的处理函数CTestV
    iew::OnCreate,在此函数中,调用控件类CMSFlexGrid的Create函数:
        int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
        {
           if (CView::OnCreate(lpCreateStruct) == -1)
              return -1;
          // ****** Add your code below this line ********** //
           m_fgrid.Create(NULL, WS_VISIBLE,
              CRect(50,50,100,100), this, 0);  //用this指针作为指向父窗口的
    指针
           m_fgrid.SetCols(2);
           m_fgrid.SetRows(10);
           m_fgrid.SetTextMatrix(0,0,"序号");
              m_fgrid.SetTextMatrix(0,1,"姓名");
           // ****** Add your code above this line ********** //
           return 0;
        }
    4.         重新链接工程,运行。可以看到当应用程序的视窗生成时,控件也动
    态地生成了。
    5.         如果你以后还想改变控件的位置和大小,可以继承CWnd::MoveWindow
    ()函数。例如,若想使控件充满整个窗口,并在父窗口移动和缩放时也随之移动和
    缩放,可以添加消息WM_SIZE的处理函数OnSize,并加入如下代码:
      void CTestView::OnSize(UINT nType, int cx, int cy)
       {
          CView::OnSize(nType, cx, cy);
            // TODO: Add your message handler code here
            m_fgrid.MoveWindow(0,0,cx,cy);
       }
    原文:http://www.smth.edu.cn/bbsanc.php?path=%2Fgroups%2Fdevelop.faq%2FVisualC%2FVC_NEW_OLDVC%2FBook%2FControl%2FG.1025614734.a0