• 【VS开发】动态创建ActiveX控件


    bool CCollectDataDlgDlg::CreateMyCtrl(LPRECT lpRect, UINT nID, CWnd *pParent)
    {
     CLSID clsid;
     wstring strClsid = _T("{126983A5-3415-4A3F-B2C6-D18DDF6E43B9}"); // 控件id号

     CCOMHelper  COMHelper;
     COMHelper.clsid_from_string(&clsid, strClsid.c_str());

     BOOL bSucc = false;
     TCHAR szMsg[1024] = {0};

     try
     {

     // MyCtrl必须是全局的CWnd类对象
      bSucc = m_MyCtrl.CreateControl(
       clsid, 
       _T("CollectData"),
       WS_CHILD | WS_VISIBLE| WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
       CRect(lpRect),
       pParent,
       nID,
       NULL, FALSE, NULL);
     }
     catch (CMemoryException* e)
     {
      e->GetErrorMessage(szMsg, 1024);
      e->Delete();
     }
     catch (CFileException* e)
     {
      e->GetErrorMessage(szMsg, 1024);
      e->Delete();
     }
     catch (CException* e)
     {
      e->GetErrorMessage(szMsg, 1024);
      e->Delete();
     }

     if (!bSucc)
     {
      AfxMessageBox(_T("创建CollectData.ocx控件失败 请检查CollectData.ocx控件是否安装并注册"));
      return false;
     }

     IUnknown *pUnk = m_MyCtrl.GetControlUnknown();
     CComQIPtr<_DCollectData> spDCollectDataCtl(pUnk);
     if (spDCollectDataCtl == NULL)
     {
      AfxMessageBox(_T("无法从CollectData.ocx中获取_DCollectData接口"));
      return false;
     }

     return true;
    }


    注意:必须在工程的app文件的InitInstance()中加入如下代码,否则动态创建控件不会成功

    AfxEnableControlContainer();


    上述只是动态创建了ocx控件,但控件的接口函数等还是不能用,必须按下面的步骤,控件的接口等才会被识别:
    在你加载该ocx控件的主工程节点中单击鼠标右键,在弹出的菜单中选择“添加---->类”菜单,在弹出的对话框中选择如下红色圈圈中的项:
    动态创建ActiveX控件 - danshiming - danshiming的博客
    单击“添加”按钮,弹出如下对话框
    动态创建ActiveX控件 - danshiming - danshiming的博客
    上面对话框罗列出了注册表中所有的ocx控件,找到你要添加的控件,单击“完成”,此时会生成一个封装该ocx的cpp和.h文件,在主程序中包含该.h即可使用该ocx控件中的接口了
  • 相关阅读:
    VGA实验 :逻辑分析仪
    VGA实验:点亮屏幕
    ASP.NET 4‎.0 生成 eurl.axd Http异常错误的处理方法 (汗IIS 怎这么多莫名其妙的问题)
    腾讯检测 IP 省市的接口
    hql 中cast 方法的使用
    asp.net 防止外部提交数据(转)
    为 SQL Server 启用缓存通知
    net中前台 javascript与后台c#函数相互调用
    const 与 readonle 的异同
    获取页面执行时间的几种方法(asp.net转)
  • 原文地址:https://www.cnblogs.com/huty/p/8518426.html
Copyright © 2020-2023  润新知