我要在对话框中使用一个第三方的ActiveX控件,但这个控件不支持从gallery里Add to project, insert control.即无法用dialog resource editor加入。
我只知道首先要用import将dll或lib倒入。但是如何生成一个instance,如何使用CreateControl? 如何使用它的方法和事件?请讲的详细一点,谢谢!!!

解决方案 »

  1.   

    注册这个控件后,就可以在gallery中找到.
      

  2.   

    如果你不想用很复杂的COM接口来操作这个AciveX的话呢,
    1、首先用一个简单的窗口类包装那个ActiveX
    // This code is generated by the Control Wizard.
    // It wraps the call to CreateControl in the call to Create.
    class CGenocx : public CWnd
    {
    protected:
       DECLARE_DYNCREATE(CGenocx)
    public:
       CLSID const& GetClsid()
       {
          static CLSID const clsid
             = { 0x8a6bbfeb, 0xf9bb, 0x11d1, { 0xb9, 0xc9, 0x0, 
             0x60, 0x8, 0x93, 0xb0, 0xfe } };
          return clsid;
       }
       virtual BOOL Create(LPCTSTR lpszClassName,
          LPCTSTR lpszWindowName, DWORD dwStyle,
          const RECT& rect,
          CWnd* pParentWnd, UINT nID,
          CCreateContext* pContext = NULL)
       {
          return CreateControl(GetClsid(), lpszWindowName, 
          dwStyle, rect, pParentWnd, nID); 
       }
    ...
    };2、在Dialog类里声明这个ActiveX的成员,
    class CMyDialog : public CDialog {
        ...    CGenocx control;  
    };3、在资源文件你的 DIALOG 段中加入ActiveX控件的说明
    IDD_TPATEST_DIALOG DIALOGEX 0, 0, 443, 325
    ...
    BEGIN
    ...
        CONTROL "",IDC_CTRL1,"{12345678-1234-5678-1234-123456789000}",
                        WS_TABSTOP,7,7,375,311
    ...
    END好了,现在你应该已经可以用这个控件了。方法和事件的调用取决于你的包装类,即上面的CGenocx。ActiveX接口最简单的包装就是用InvokeHelper()了。Good luck!
      

  3.   

    试了几次,终于出来了。其实简单,就是太着急了。Wraper函数很好用。